jQuery UI 滑块 - 根据拖动方向选择重叠滑块
我有这个简单的 jQuery UI 滑块设置,其中包含一个范围和两个重叠的默认值。整个事情(还有一些花里胡哨的东西)可以在这个jsfiddle中找到: http://jsfiddle.net/ yijian/XeyGS/
$('#slider').slider({
min: 1,
max: 11,
range: true,
values: [4, 4]
});
这样做的问题是,当您尝试将单个可见句柄拖动到右侧时,它会失败,因为 jQuery UI 总是将最小句柄放在顶部。由于多种原因,这显然很糟糕。
有没有办法让 jQuery UI 根据用户开始拖动的方向来选择拖动哪个手柄?
I have this simple jQuery UI Slider setup with a range and a two default values that overlap. The entire thing (with a few bells and whistles) can be found in this jsfiddle: http://jsfiddle.net/yijiang/XeyGS/
$('#slider').slider({
min: 1,
max: 11,
range: true,
values: [4, 4]
});
The problem with this is that when you attempt the drag the single visible handle to the right, it fails, because jQuery UI always places the minimum handle on top. This is obviously bad, for a number of reasons.
Is there a way to allow jQuery UI to choose which handle to drag depending on which direction the user starts dragging?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
啊,我喜欢吃掉 11k 块,你也喜欢吗? :)
注意: 下面是针对 jQuery UI 1.8.5
无论如何,这是一个非常干净的解决方案:
这就是它的全部内容,哦,当然,它是如何工作的:
为了您的方便,这里有一个
diff
:将其保存到
ui.diff
然后执行patch -i ui.diff jquery-ui.js
。Ah, I like it to eat through 11k libs, don't you too? :)
Note: The following is for jQuery UI 1.8.5
Anyways, here's a pretty clean solution:
And that's all there is to it, oh how it works, of course:
And for your pleasure here's a
diff
:Save it to
ui.diff
then dopatch -i ui.diff jquery-ui.js
.向 Ivo 致歉,他的非常好答案 我确信我花了很多努力来创建。问题是我无法应用该解决方案,因为我已经使用了 1.8.6,我无法在任何地方找到 1.8.5 源代码来应用它,而且不知何故我无法让补丁发挥作用对于 1.8.6,即使我尝试手动添加行。
以下是我对问题的解决方案。它比 Ivo 的简单,但这可能是因为两个点版本之间的差异。解决方案如下:
_handleIndex) 周围,导致最大句柄被用作内部
_slide
函数的参考,而不是第一个。diff
如下:第一部分应插入到声明变量的初始化区域中,第二部分应插入到调用
_mouseCapture
函数之前>_slide,以及_mouseDrag
函数的最后一部分,也在调用_slide
之前。以下是该补丁的工作示例:http://www.jsfiddle.net/HcGXZ/
可以在此处找到已修补的 jQuery UI 1.8.6 Slider 文件的副本: http://dl.dropbox.com/u/1722364/jQuery%20UI%20Slider%20Patch/jquery.ui.slider.patched.js
与往常一样,此补丁尚未经过广泛测试,并且不保证适用于所有场景。
With apologies to Ivo there, whose excellent answer there I'm sure took a lot of effort to create. The problem is that I couldn't apply that solution, because I'm already on 1.8.6, I can't find the 1.8.5 sources anywhere to apply it to, and somehow I just couldn't get the patch to work for 1.8.6, even when I tried adding in the lines manually.
The following is my solution to the problem. It is simpler than Ivo's, but that might be because of differences between the two point releases. The solution is as follows:
_handleIndex
) around, causing the maximum handle to be used for reference for the internal_slide
function instead of the first.The
diff
is as follows:The first part should be inserted into the initialising area, where the variables are declared, the second into the
_mouseCapture
function right before the call to_slide
, and the last part into the_mouseDrag
function, also right before the call to_slide
.Here's a working example with the patch: http://www.jsfiddle.net/HcGXZ/
A copy of the patched jQuery UI 1.8.6 Slider file can be found here: http://dl.dropbox.com/u/1722364/jQuery%20UI%20Slider%20Patch/jquery.ui.slider.patched.js
As always, this patch has not been extensively tested and is not guaranteed to work for all scenarios.
我想说这是一个错误,更是如此,因为当两个滑块手柄都位于最小/最左侧位置时,已经有逻辑防止发生“死锁”:
它看起来像 ticket #3736 仍然开放,其中提到了您遇到的具体问题。
I'd say this is a bug, doubly so because there's already logic preventing a ‘deadlock’ from happening when both slider handles are at the minimum / far left position:
It looks like ticket #3736 is still open, with mentioning of the specific problem you're seeing.
我尝试了易江的解决方案 使用 1.8.12 时,它在带有单个手柄的滑块上破裂,但在我更改
为
I tried Yi Jiang's solution with 1.8.12 and it broke on a slider with a single handle, but worked perfectly after I changed
to
将其放入声明变量的初始化区域:
将其放入调用
_slide
之前的_mouseCapture
函数中:并将其放入
_mouseDrag
code> 函数,也在调用_slide
之前,我刚刚在上面的代码中添加了一个
else if
;它在 jQuery 1.8.14 中工作正常左右按钮处理程序。
Put this into the initialising area, where the variables are declared:
Put this into the
_mouseCapture
function right before the call to_slide
:And this into the
_mouseDrag
function, also right before the call to_slide
I just added an
else if
to the above code; it's working fine in jQuery 1.8.14 forboth left and right button handlers.
另一个解决方案:
测试这两个值,如果它们相同,则返回到最后一步。
Another solution:
Test for both values and if they are the same, return to the last step.
的新版本
这是 jQuery UI 1.10.2补丁文件
: http://pastebin.com/Dsxw8NYR完整文件: http://pastebin.com/ibSpAAX1
Here's a new version for jQuery UI 1.10.2
Patch file: http://pastebin.com/Dsxw8NYR
Complete file: http://pastebin.com/ibSpAAX1