作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我制作了一个用鼠标滚动的图像。
图像根据鼠标位置占窗口高度的百分比滚动到某个位置。
$(imageContainer).mouseenter(function(e){
var scrollingTo = ((e.pageY/$(this).height())-.083) * ( $(imageContainer).prop('scrollHeight') - $(imageContainer).height() );
hijacked = true;
$(imageContainer).animate({scrollTop:scrollingTo},300,function(){hijacked=false;});
}).mousemove(function(e){
if(hijacked) return;
var scrollingTo = ((e.pageY/$(this).height())-.083) * ( $(imageContainer).prop('scrollHeight') - $(imageContainer).height() );
$(imageContainer).scrollTop(scrollingTo);
});
所以。在那一行
$(imageContainer).animate({scrollTop:scrollingTo},300,function(){hijacked=false;});
我想要改变scrollingTo。因为在动画过程中,用户可以移动鼠标,从而更改scrollingTo 变量。
最佳答案
好吧,我设法一起 cooking 了一种动态改变动画的古怪方法。我对 jQuery 内部动画队列的理解不是很好,但据我所知,除了让它停止之外,没有办法改变排队的动画。无论如何,这是一个改变位置的示例的关键代码,它应该适应滚动(在 fiddle form 中):
$(document).ready(function () {
var last_update = 0;
$(document).on("mousemove", function (e) {
if (Date.now() - last_update > 50) {
$mover = $("#mover");
$mover.stop();
$mover.animate({ left: e.pageX, top: e.pageY}, 200, "linear");
last_update = Date.now();
}
});
});
有一些技巧可以使其发挥作用,我将详细介绍它们并尝试解释我认为它们如何适应滚动:
主要思想是,在鼠标移动时,先前的事件被取消,并开始一个新的事件。我不认为这需要对滚动进行任何更改。
某些形式的动画会在动画过程中加速/减速 - 在不断变化的动画中很难保留这一点(至少在不编写自定义动画函数的情况下),因此动画缓动设置为“线性”。
快速更改动画需要时间(特别是对于像鼠标移动这样常见的事件),因此动画更改的频率是有限的。在对动画进行更改之前,请确保在最后 0.05 秒内没有进行任何更改(这是通过“last_update”完成的)。
我相信,如果您只是将动画属性替换为您自己的动画属性(scrollTop),这应该可以满足您的要求。
关于javascript - jQuery 动画 : Change the destination of a prop during the animation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12412557/
我是一名优秀的程序员,十分优秀!