javascript - 平滑的 Javascript mousemove 类似于 Cubism.js

标签 javascript jquery d3.js cubism.js

我很好奇 Mike Bostock 如何能够以如此流畅的方式创建一条跟随鼠标光标的垂直线。如果你看这里http://square.github.com/cubism/ ,你可以明白我在说什么。

看看我刚刚在这里制作的一个简单示例:http://jsfiddle.net/zbfUq/

在我的示例中,有很多次该行实际上消失了。他是否正在做某种位置插值以在未记录的两个点之间创建平滑的平移?如果是这样,有人知道如何做这样的事情吗?

最佳答案

我已经为您制作了一个工作示例: http://jsfiddle.net/zbfUq/37/

本质上,您已经在 onmousemove 事件处理程序中记录了鼠标位置,但实际上并没有立即将线移动到那里。

然后您运行一个计时器,该计时器每隔一段时间检查一次(在我的示例中为每 10 毫秒一次),并将线条移近鼠标位置。

onmouseover 事件中,我将行位置设置为鼠标位置,并设置了计时器。

onmouseout 事件中,我清除了计时器,并将行位置设置回 0(您也可以隐藏行)。

updatepos 函数首先检查直线距离鼠标位置有多远。如果距离小于 1px,它只是将线移动到鼠标位置。如果距离超过 1px,它会以与距离成正比的速度移动得更近(如果线距离鼠标较远,它会更快地移动)。

Javascript 代码

(function() {
    var selectline = document.getElementById('selection_line');
    var container = document.getElementById('page_content');
    var mouseX = 0;
    var lineX = 0;

    var linetimer;

    var updatepos = function () {
        var speed, distance;
        distance = Math.abs(mouseX - lineX);
        if (distance < 1) {
            lineX = mouseX;
        }
        else {
            speed = Math.round( distance / 10, 0 );
            speed = speed >= 1 ? speed : 1;
            lineX = (lineX < mouseX) ? lineX + speed : lineX - speed;
        }

        selectline.style.left = lineX + 'px';

    }

    $(container).on("mouseover", function(e) {
        lineX = mouseX;
        selectline.style.left = lineX + 'px';
        linetimer = setInterval(updatepos, 10);
    });

    $(container).on('mousemove', function(e) {
        mouseX = e.pageX;
        console.log(mouseX);
    });

    $(container).on("mouseout", function(e) {
        clearTimeout(linetimer);
        lineX = 0;
        selectline.style.left = LineX + 'px';
    });
})();​

关于javascript - 平滑的 Javascript mousemove 类似于 Cubism.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12844704/

相关文章:

javascript - 使用 jQuery 随机引用

Javascript 快速静音 youtube 视频 iframe 的方法

css - 如何使用 D3 在鼠标悬停时模糊图像?

javascript - d3 基于值的文本标签格式

javascript - 使用 Jquery Ajax 更改按钮的颜色(从外部 PHP 文件接收的颜色)

d3.js - D3 在将 .data() 设置为附加元素时抛出 "Cannot read property ' ownerDocument' of null"

javascript - 使用 window.location.replace 有没有办法更改端口?

javascript - Jquery的append和settimeout死循环

javascript - 检测用户已滚动超过第一部分

Javascript 幻灯片显示最后一张图片 5 次