是否有可能减慢可拖动元素的速度?
我用jQuery拖放构建了一个简单的滑块。当滑块元素(可拖动元素)移动到特定位置时,图片会淡入。因此,如果你移动拖动元素不是太快,它看起来像你可以处理一个“图片动画”与滑块。现在,我想减慢可拖动元素的速度。所以用户永远不会拖元素太快。
这是我的代码的一个例子。
$('.slider').mousemove(function(){
if($(this).position().left >= 0 && $(this).position().left <= 2 ) {
$('.slider_1').fadeIn();
$('.slider_2').fadeOut();
}
...
希望有人能帮帮我:)
1条答案
按热度按时间2fjabf4q1#
最后是一个有趣的jQuery问题。
这是绝对可以做到的。下面我就来解释一下“如何”。如果你想直接进入演示,click here。
让我们假设你的HTML设置如下:
其中栏是您单击和拖动的实际对象。
现在你需要做的是:
$('#bar').offset().left
SPEED
显式指定拖动对象时#bar
的位置举例来说:
然后,您可以在jQuery的
.fadeTo()
(或其他)函数中使用$('#bar').offset().left
来更改您正在谈论的图像的不透明度。这一切看起来都很琐碎,但事实并非如此。在试图实现这一点时存在一些问题。举例来说:
当滑块达到最大滑动距离时,它应该停止动画或重置。你可以通过多种方式来实现这一点,但我认为最简单的解决方案是编写一个
.mousedown
/.mouseup
侦听器,它更新一个变量dragging
,跟踪用户是否仍在尝试拖动#bar
。如果不是,重置#bar
。如果是,则将滑块保持在最大距离,直到.mouseup
被触发。此外,您必须小心预定义的边框。
我建议的代码如下:
我还在
draggable
上实现了revert
选项,因此当用户释放#bar
时,滑块会很好地返回到零。当然,如果你愿意,你可以删除它。现在你的整个问题是关于变量的:
SPEED
。可以通过为此变量指定一个数字来指定拖动速度。
例如:
因此,* 负 * 值给予 * 较慢 * 的拖动速度,而 * 正 * 值给予 * 较快 * 的拖动速度。
事实上(或实际上:幸运的是,它是 * 不 * 可能改变鼠标指针的速度。这是因为只有操作系统可以控制鼠标的坐标和速度。浏览器无法影响这一点。我个人认为这并不重要:移动滑块比正常速度慢是你试图实现的,所以你可以忽略鼠标指针。
为了看到这一切,我为你准备了一个工作的jsFiddle:
DEMO
希望这对你有帮助:)