javascript - 使用 vanilla javascript 和 velocity.js 旋转 div 以面对鼠标光标缓慢运行

标签 javascript html css css-animations velocity.js

我正在尝试创建 3D 在 X 和 Y 轴上旋转的 div,以便它始终面向鼠标光标。

我正在为动画库使用 vanilla Javascript 和 Velocity.js。

到目前为止,这是我的 Javascript 代码,请查看 html 和 css 的 Codepen 链接:

var el = document.querySelector("#circle");// get mouse position on x y
onmousemove = function(event) {
var x = event.clientX
var y = event.clientY

var HEIGHT = document.body.clientHeight;
var WIDTH = document.body.clientWidth;

console.log("x position: "+ x +", " + "y position: " + y);


var calcX= Math.floor(x/10)
var calcY= Math.floor(y/10)

Velocity(el, {rotateX:calcX})
Velocity(el, {rotateY:calcY})

// rotate element towards x and y co-ordinates

};

http://codepen.io/anon/pen/bpzjar

我知道数学计算不正确,如果有人知道正确的代码是什么,那就太棒了!

但我主要是想看看为什么代码这么慢,它似乎是在计算并遍历每个度数,而不是直接去计算最终的结果,以便它快速响应。

如果有人能帮我弄明白那就太好了。

谢谢!

最佳答案

作为一种计算方法,您可以将鼠标位置映射到度值:

var calcY = Math.round(map_range(x, 0, WIDTH,  -60, 60));
var calcX = Math.round(map_range(y, 0, HEIGHT, 60, -60));

function map_range(value, low1, high1, low2, high2) {
    return low2 + (high2 - low2) * (value - low1) / (high1 - low1);
}

Javascript 没有原生的 Math.map 函数,但上面包含的简单帮助程序可以做到这一点(归功于 this SO answer )

这将在两个轴上从 -6060 度之间旋转。

参见 codePen example for this

正如其他人已经提到的; Velocity.js 更适用于过渡(随时间变化的动画),您不需要它仅用于跟随鼠标 交互。

尽管如此,您也可以使用来自 Velocity.js 的 .hook 函数助手 - 直接跳转到一个值(这是我在 codePen 示例中使用的)。

Velocity.hook(el, "rotateX", calcX+"deg");
Velocity.hook(el, "rotateY", calcY+"deg");

关于javascript - 使用 vanilla javascript 和 velocity.js 旋转 div 以面对鼠标光标缓慢运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37116232/

相关文章:

javascript - 如何从命令按钮中取消选择 primefaces selectCheckboxMenu 中的所有元素

javascript - 失败的 Prop 类型 : Invalid prop `app` supplied to `Body` , 需要一个 ReactElement

html - 使用 Bootstrap 3 网格系统在不同屏幕尺寸上组织 div

html - 如何在html/css中向上移动图像

Javascript addEventListener 麻烦

css - Webkit 滚动条 CSS, Angular 落里总是一个白框

javascript - 将输入值插入 JSON 数组

html - Wordpress 如何使 slider 全宽(Metaslider)

html - 具有较高 z 索引的 DIV 在单击包含 Silverlight 对象的具有较低 z 索引的 div 时会隐藏

javascript - 如何从其他 Controller 关闭 Angular-ui 模式