jQuery UI Slider - 手柄和滚动内容的动画不同步

Posted

技术标签:

【中文标题】jQuery UI Slider - 手柄和滚动内容的动画不同步【英文标题】:jQuery UI Slider - Animation of handle and scroll content not in sync 【发布时间】:2012-01-02 13:15:37 【问题描述】:

我在为我的目的定制 jQuery UI 滑块时遇到了麻烦。

在加载滑块时,它的内容应该会自动动画到某个位置。理想情况下,只要用户不将鼠标悬停在滚动内容或滑块上,它应该动画到最右边,然后停止并返回动画(作为循环)。

按照我的默认滑块设置 (http://jsfiddle.net/mayko/j6WuE/1/):

var scrollbar = $("#slider").slider(
    animate: 3000,
    min: 0,
    max: $("#timeline_content .items").width(),
    change: handleSlider,
    slide: handleSlider
); 
function handleSlider(e, ui) 
    $("#timeline_content").stop().animate(scrollLeft: ui.value, scrollbar.slider("option", "animate"));

如果我现在尝试这样设置值:

$('#slider').slider('value': 1000);

滚动内容的动画效果很好,但手柄只是跳到了那个新位置。

即使我单击滑块轨道本身,滚动内容和滑块句柄的动画也不同步。

有人有解决办法吗?

【问题讨论】:

【参考方案1】:

“动画”选项仅适用于单击滚动条。动画不会像您所做的那样通过手动设置值来触发。

为了使滑块移动,您要么必须模拟用户输入(例如:触发滑块上的点击),要么使用增量值设置来伪造它。

不幸的是,滑块似乎对滑块区域做了一些奇怪的事情,我无法在那里触发点击;您可以尝试假装单击并拖动滑块吗?

所以替代方案是重复设置滑块的值,但看起来很糟糕。

function advanceSlider(next)
    scrollbar.slider('value',next)
        if(next<1050)
            setTimeout(function()  advanceSlider(next+50) ,150);

advanceSlider(1);

对不起,jsFiddle

【讨论】:

你是对的。看起来很可怕!我可以改用什么 jQuery Ui 工具?还是 jQuery Tools Lib 有更好的方法来处理滑块?

以上是关于jQuery UI Slider - 手柄和滚动内容的动画不同步的主要内容,如果未能解决你的问题,请参考以下文章

jQuery UI Slider范围:保持按钮在范围内[关闭]

jQuery UI 滑块自定义不起作用 [关闭]

jQuery UI Slider 在最低设置下显示初始值

如何更改 Jquery UI 滑块句柄

jquery UI可拖动:在容器内水平拖动溢出:滚动?

Jquery UI Slider 增量和减量