jQuery UI 滑块 - 根据拖动方向选择重叠滑块

2023-11-26

我有这个简单的 jQuery UI 滑块设置,其中包含一个范围和两个重叠的默认值。整个事情(还有一些花里胡哨的东西)可以在这个 jsfiddle 中找到:http://jsfiddle.net/yijian/XeyGS/

$('#slider').slider({
    min: 1,
    max: 11,
    range: true,
    values: [4, 4]
});

这样做的问题是,当您尝试将单个可见句柄拖动到右侧时,它会失败,因为 jQuery UI 始终将最小句柄放在顶部。由于多种原因,这显然很糟糕。

有没有办法让 jQuery UI 根据用户开始拖动的方向来选择拖动哪个手柄?


啊,我喜欢吃掉 11k 块,你也喜欢吗? :)

Note:以下适用于 jQuery UI 1.8.5

无论如何,这是一个非常干净的解决方案:

// add some stuff to the slider instance
this._handleIndex = null;
this._handleStartValue = -1; 

// remember the starting values in _mouseCapture
this._handleStartValue = this.values( this._handleIndex ); 
this._mouseDownOffset = this._normValueFromMouse( { x: event.pageX, y: event.pageY } );


// modify _mouseDrag
oldValue = this.values( this._handleIndex ),
curValue;

curValue = this.values(this._handleIndex);
if ( curValue === oldValue && this._handleStartValue !== -1 ) {
    if ( normValue - this._mouseDownOffset > 0
         && ( curValue === this.values( ( this._handleIndex + 1 ) % 2 ) )
         && oldValue === this._handleStartValue) {

        this._handleIndex = (this._handleIndex + 1) % 2;
    }

} else {
    this._handleStartValue = - 1
}

// reset everything in _mouseStop
this._handleIndex = null;
this._handleStartValue = -1; 

这就是它的全部内容,哦,当然,它是如何工作的:

  1. 保存起始鼠标偏移以及初始选择手柄的值
  2. 拖动时将旧值与活动手柄的当前值进行比较,并检查起始位置是否有效
  3. 如果没有差异,我们检查如果可以进一步拖动活动手柄是否会有差异
  4. 如果是这种情况,我们检查两个句柄是否具有相同的值,这意味着它们位于彼此之上
  5. 现在我们检查当前选定的手柄是否尚未被拖动
  6. 最后,如果这一切都是真的,我们切换手柄
  7. 如果用户现在更改了值,我们将使起始位置无效,以便不再在手柄之间进行切换

为了让您高兴,这里有一个diff:

9960c9960,9962
< 
---
>       
>       this._handleIndex = null;
>       this._handleStartValue = -1; 
10215a10218,10219
>         this._handleStartValue = this.values( this._handleIndex ); 
>       this._mouseDownOffset = this._normValueFromMouse( { x: event.pageX, y: event.pageY } );
10243c10247,10249
<           normValue = this._normValueFromMouse( position );
---
>           normValue = this._normValueFromMouse( position ),
>           oldValue = this.values( this._handleIndex ),
>           curValue;
10246c10252,10263
< 
---
>       curValue = this.values(this._handleIndex);
>       if ( curValue === oldValue && this._handleStartValue !== -1 ) {
>           if ( normValue - this._mouseDownOffset > 0
>                && ( curValue === this.values( ( this._handleIndex + 1 ) % 2 ) )
>                && oldValue === this._handleStartValue) {
>             
>               this._handleIndex = (this._handleIndex + 1) % 2;
>           }
>         
>       } else {
>           this._handleStartValue = - 1
>       }
10257a10275,10276
>       this._handleStartValue = -1; 
>       this._handleIndex = null;

保存到ui.diff然后做patch -i ui.diff jquery-ui.js.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery UI 滑块 - 根据拖动方向选择重叠滑块 的相关文章

  • Mocha / Chai Expect.to.throw 未捕获抛出的错误

    我在获取 Chai 时遇到问题expect to throw测试我的 node js 应用程序 测试在抛出的错误上不断失败 但是如果我将测试用例包装在 try 和 catch 中 并对捕获的错误进行断言 它就会起作用 Does expect
  • JavaScript 函数参数和范围

    我用下面列出的代码做了一些测试 function foo x alert y var y I am defined outside foo definition foo 上面的代码给了我一个警告 我是在 foo 定义之外定义的 然后另一个测
  • 是否可以从“GET”请求中检索 MS/延迟? (Javascript/Jquery)

    我目前正在使用 jquery 发出一些 getjson 请求 他们是获取请求 GET http localhost MySite JSON http localhost MySite JSON 现在您可以在 Firebug 中观看请求的触发
  • 如何防止缓慢脚本警告并强制浏览器继续运行脚本直到完成?

    更新 2013 年 7 月 5 日 自从我最初问这个问题以来 我学到了很多东西 在下面的一条评论中 有人建议我重新处理该任务 并找到一种方法来解决它 而不会有阻塞 UI 的风险 我说不可能 函数必须按原样运行 我实际上不记得我试图用这个函数
  • ajax 和相对 url

    我真的不明白这个 我有以下 获取 请求 ajax url api getdirectories dataType json success function data Do stuff 这是我的临时服务器向我提供的页面 http atlas
  • 更改导航栏悬停时 div 的背景图像

    我正在开发一个项目 我对 Javascript 很陌生 所以我想知道是否有 Jquery 代码或只是一个关于如何使背景图像在导航菜单悬停时更改的过程 例如将鼠标悬停在链接一上会将 div 的背景图像更改为图像 1 将鼠标悬停在链接二上会将
  • 删除 CSS Transitionend 事件侦听器不起作用

    我在尝试删除 css Transitionend 事件侦听器时遇到问题 我可以添加监听器 e addEventListener transitionend function event transitionComplete event pr
  • JavaScript 中的自定义“确认”对话框?

    我一直在开发一个使用自定义 模式对话框 的 ASP net 项目 我在这里使用吓人引号 因为我知道 模式对话框 只是我的 html 文档中的一个 div 它被设置为出现在文档其余部分的 顶部 而不是真正意义上的模式对话框 在网站的许多部分
  • 如何从 dataurl 在服务器上创建图像文件

    我有一个 dataurl 格式的图像 例如 data image jpeg base64 9j 4AAQSkZJRgABAQAAAQABAAD 2wBDAAMCAgMCAgMDAwMEAwME iiigAooooAKKKKACiiigAoo
  • 在没有全局变量的情况下对多个事件使用 Promise 回调

    我有一个包含在函数中的承诺 我将使用不同的输入参数多次调用该函数 每次承诺解决时 我都会将解决的值推送到存储数组中 当我所有的调用承诺都得到解决后 我将在其他函数中使用这个存储数组 是否有任何干净的方法可以在不使用 全局 变量的情况下进行设
  • Primeng 时间表与 Angular2 webpack

    我将使用 Primeng 时间表 http www primefaces org primeng schedule http www primefaces org primeng schedule 在基于 Angular2 webpack
  • 如何使用 jQuery AJAX 和 JSON 通过 Bootbox 确认表单提交

    我正在使用一个网络应用程序工作Spring MVC 我试图在提交表单之前显示一个确认对话框Bootbox 但我收到 500 内部服务器错误 这是我的表格
  • 如何在 Android 设备(平板电脑和手机)方向更改时获得正确的窗口宽度

    我正在尝试使用 jquery 函数计算 Android 设备方向变化时的窗口宽度 window outerWidth true 此计算给出了两个方向变化的正确宽度iphone and ipad但在安卓中不行 如果我最初以横向模式或纵向模式加
  • 已安装 cypress npm 软件包,但缺少 Cypress 二进制文件

    大家好 我是 azure devops CI 的新手 我正在尝试通过在作业之间缓存 node modules 来减少管道构建时间 但我遇到了无法解决的错误 我正在使用 cypress 进行测试 这是我的天蓝色管道 Node js Build
  • 如何获取td表的实际宽度

    我在 html 中创建一个表 这个table宽度为 988 像素 tr宽度为 100 table width 表标签中存在 5 个td标记这个td标签宽度 20 当我使用 jQuery 处理这些标签时 td标签 在控制台中向我显示 198
  • JQuery 语言下拉选择器

    我需要一个已经实现的 JQuery 或 JavaScript 下拉语言选择器解决方案 当用户单击下拉菜单时 该下拉菜单应打开 并且应显示语言列表 左侧带有该国家 地区的国旗 我什至找不到例子 任何 jQuery 下拉插件都不能正常工作吗 您
  • 如何使用 Browserify 获取 html 模板

    我正在尝试找出一种简单的方法 在脚本中需要 html 模板 然后从 CLI 运行 browserify 假设我想获取一个模板并将其附加到正文中 index js var template require template html docu
  • 谷歌地图通过骨干javascript返回div标签但不显示

    我已经开始使用地理定位 我可以获得坐标等 我想在地图中显示它 但是当我将地图返回到 div 时 什么也没有显示 现在我查看了 div 地图正在返回 但只是不可见 这是有问题的 div 请注意 这似乎只是一个小地图的链接 a style di
  • 将 jQuery 与 Batman.js 结合使用

    我正在尝试使用 Batman js 并且我想将 jQuery 与它一起使用来实现一些标准的 Ajax 和动画功能 我正在按照位于的安装说明进行操作http batmanjs org download html http batmanjs o
  • 如何在 Mongo 聚合管道的 $unwind 阶段保留零长度值?

    我正在使用聚合管道编写 Mongo 查询 在聚合过程中 我需要 unwind领域之一 但是 我不想要 unwind排除该字段具有零长度数组的条目 因为我仍然需要它们进一步深入管道 我的领域叫做items它是一个对象数组 每个对象包含两个值

随机推荐