RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1072673
Accepted
MoloF
MoloF
Asked:2020-01-22 02:06:09 +0000 UTC2020-01-22 02:06:09 +0000 UTC 2020-01-22 02:06:09 +0000 UTC

Vue.js | 鼠标光标磁铁,悬停时的磁性效果

  • 772

我无法创建磁化效果,我尝试从这里开始效果,但没有成功

链接到工作结果。| 链接到第二个工作结果。

链接到我的结果。(vue上的代码,所以我把它贴在sanbox上)

悬停时,缩放效果有效,但磁化效果无效。

кода нет, все в песочнице
vue.js
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    Stranger in the Q
    2020-01-22T04:14:51Z2020-01-22T04:14:51Z

    发生了这样的事情:

    let actual = [0, 0, 0], target = [0, 0, 0], xy = [0,0];
    let elements = [...document.querySelectorAll('a')];
    addEventListener('mousemove', requestCursorPosition);
    addEventListener('scroll', requestCursorPosition);
    requestAnimationFrame(moveCursor);
    
    function requestCursorPosition(e) {
        let X = xy[0] = (e.x || xy[0]);
        let Y = xy[1] = (e.y || xy[1]);
        let snap = elements.map(el => {
            let r = el.getBoundingClientRect();
            let x = r.x + r.width/2 - X;
            let y = r.y + r.height/2 - Y;
            return [x, y, x*x + y*y];
        }).find(el => el[2] < 900);
        
        target[0] = (snap ? snap[0] : 0) + X + window.pageXOffset;
        target[1] = (snap ? snap[1] : 0) + Y + window.pageYOffset;
        target[2] = snap ? 15 : 5;
    }
    
    function moveCursor() {
        for (var i=0; i<3; i++)
            actual[i] += (target[i] - actual[i])/5;
        
        document.body.style.background = 
            `radial-gradient(
                circle at ${actual[0]}px ${actual[1]}px, 
                #0000, 
                #0000 ${actual[2]}px, 
                #0007 ${actual[2]+1}px,
                #0007 ${actual[2]+2}px,
                #0000 ${actual[2]+3}px)`;
                
        requestAnimationFrame(moveCursor);
    }
    body {
        height: 200vh;
        margin: 0;
    }
    
    a {
      padding: 10px;
      display: inline-block;
    }
    <a href=#>test 1</a>
    <a href=# style="position:absolute;bottom:20px">test 2</a>
    <a href=#>test 3</a>
    <a href=# style="float:right">test 4</a>

    • 6
  2. Stranger in the Q
    2020-01-22T16:46:33Z2020-01-22T16:46:33Z

    这是一个以元素而不是背景作为光标的变体

    let elements = [...document.querySelectorAll('a')];
    addEventListener('mousemove', e => {
        let snap = elements.map(el => {
            let r = el.getBoundingClientRect();
            let x = r.x + r.width/2 - e.x;
            let y = r.y + r.height/2 - e.y;
            return [x, y, x*x + y*y]; 
        }).find(el => el[2] < 900);
        cursor.style.left = (snap?snap[0]*0.7-11:0) + e.x + window.pageXOffset - 7 + 'px';
        cursor.style.top =  (snap?snap[1]*0.7-11:0) + e.y + window.pageYOffset - 7 + 'px';
        cursor.style.height = cursor.style.width = (snap ? 36 : 14) + 'px';
        cursor.style.border = (snap ? 2 : 1.1) + 'px solid #0005';
    });
    body {
        margin: 0;
        height: 100vh;
        overflow: hidden;
    }
    
    #cursor {
      pointer-events: none;
      transition: 0.2s ease-out;
      border-radius: 50%;
      display: block;
      position: absolute;
    }
    <a href=#>test 1</a>
    <a href=#>test 2</a>
    <a href=#>test 3</a>
    <a href=# style="float:right;display:inline-block;margin:100px">test 4</a>
    <div id=cursor></div>

    • 3

相关问题

  • Vuetify 代码中的 vue.js 错误

  • 使用 vuex (store.js) 从数据数组中输出列表数据

  • 在vue中的路由之间传递查询

  • 将索引和数组元素传递给模态窗口VueJS

  • Nuxt.js 通过异步请求不断在页面上抛出错误

  • 如何在Vue中分配原始元素数组[关闭]

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5