如何更改 Jquery UI 滑块句柄

Posted

技术标签:

【中文标题】如何更改 Jquery UI 滑块句柄【英文标题】:How to change Jquery UI Slider handle 【发布时间】:2010-11-15 11:47:54 【问题描述】:

我想修改普通的 JQuery UI 滑块,使手柄上有一个箭头,而不是一个正方形。即我想使用自定义图像作为句柄。

有一些教程可以做到这一点:

http://jqueryfordesigners.com/slider-gallery/ http://www.ryancoughlin.com/2008/11/04/using-the-jquery-ui-slider/ http://www.keepthewebweird.com/creating-a-nice-slider-with-jquery-ui/

但我无法让它工作。以下代码生成静止的句柄图像:

<!DOCTYPE html>
<html>
<head>
  <link type="text/css" href="http://jqueryui.com/latest/themes/base/ui.all.css" rel="stylesheet" />
  <script type="text/javascript" src="http://jqueryui.com/latest/jquery-1.3.2.js"></script>
  <script type="text/javascript" src="http://jqueryui.com/latest/ui/ui.core.js"></script>
  <script type="text/javascript" src="http://jqueryui.com/latest/ui/ui.slider.js"></script>
  <style type="text/css">
  #myhandle position: absolute;z-index: 100;height: 25px;width: 35px;top: auto;background: url(http://***.com/content/img/so/vote-arrow-down.png) no-repeat;   
  </style>
  <script type="text/javascript">
  $(document).ready(function()
    $("#slider").slider(handle: '#myhandle');
  );
  </script>
</head>
<body>
<div id="slider"><div id="myhandle"></div></div>
</body>
</html>

好像 JQuery 没有接收到我想使用 myhandle id 作为句柄。我想知道:我需要一个 JQuery 插件来识别 handle 选项吗? (它没有记录在http://docs.jquery.com/UI/Slider 中)。或者它只适用于旧版本的 JQuery?

有什么想法吗?

【问题讨论】:

之前已经回答过这个问题:***.com/questions/1170596/… 问题中的所有三个教程链接现在都已失效。 :( 【参考方案1】:

可以更改以将图像添加到 JQuery 滑块句柄的 CSS 类称为“.ui-slider-horizo​​ntal .ui-slider-handle”。

以下代码演示:

<!DOCTYPE html>
<html>
<head>
  <link type="text/css" href="http://jqueryui.com/latest/themes/base/ui.all.css" rel="stylesheet" />
  <script type="text/javascript" src="http://jqueryui.com/latest/jquery-1.3.2.js"></script>
  <script type="text/javascript" src="http://jqueryui.com/latest/ui/ui.core.js"></script>
  <script type="text/javascript" src="http://jqueryui.com/latest/ui/ui.slider.js"></script>
  <style type="text/css">
  .ui-slider-horizontal .ui-state-default background: white url(http://***.com/content/img/so/vote-arrow-down.png) no-repeat scroll 50% 50%;
  </style>
  <script type="text/javascript">
  $(document).ready(function()
    $("#slider").slider();
  );
  </script>
</head>
<body>
<div id="slider"></div>
</body>
</html>

我认为注册一个 handle 选项是旧方法,在 JQuery-ui 1.7.2 中不再支持?

【讨论】:

哇..我也面临同样的问题,从你的解决方案中得到了解决..谢谢哥们 我在 DW 中复制并粘贴了这个确切的代码并尝试了它。我用自己的图像替换了图像。根本不是滑块也不是图像显示。我已经尝试了有关此主题列出的所有解决方案,但没有任何方法可以更改图像。我将在我自己的线程下发布我的代码,如果有关于 SO 的有效解决方案,希望有人可以列出 SO 上的 URL。 png 的链接已损坏。【参考方案2】:
.ui-slider .ui-slider-handle
    width:50px; 
    height:50px; 
    background:url(../images/slider_grabber.png) no-repeat; overflow: hidden; 
    position:absolute;
    top: -10px;
    border-style:none; 

【讨论】:

【参考方案3】:

如果您需要用其他东西完全替换手柄,而不仅仅是重新设计它:

You can specify custom handle elements by creating and appending the elements and adding the ui-slider-handle class before initialization.

Working Example

$('.slider').append('<div class="my-handle ui-slider-handle"><svg  ><path d="M13,9 5,1 A 10,10 0, 0, 0, 5,17z"/></svg></div>');

$('.slider').slider(
  range: "min",
  value: 10
);
.slider .ui-state-default 
  background: none;

.slider.ui-slider .ui-slider-handle 
  width: 14px;
  height: 18px;
  margin-left: -5px;
  top: -4px;
  border: none;
  background: none;

.slider 
  height: 10px;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.9.1/jquery-ui.min.js"></script>
<link href="https://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" rel="stylesheet" />
<div class="slider"></div>

【讨论】:

这应该是彻底性和工作示例的接受答案。为什么你可以简单地注入你自己的样式?【参考方案4】:

您还应该将 border:none 设置为该 css 类。

【讨论】:

【参考方案5】:

此更改仅更改多手柄滑块中的第一个手柄。在apiDoc中你可以看到:“例如,如果你指定值:[1,5,18]并创建一个自定义句柄,插件将创建另外两个。”

【讨论】:

请添加一些关于您的解决方案的 cmet,说明它为什么以及如何解决问题

以上是关于如何更改 Jquery UI 滑块句柄的主要内容,如果未能解决你的问题,请参考以下文章

如何防止多个句柄在 jQuery UI 滑块中重叠?

如何阻止jquery UI滑块滑动到排水沟之外?

如何限制 jQuery UI 滑块的范围?

如何在运行中向 jQuery 滑块添加多个句柄

jQuery UI Slider:沿着(连同)句柄移动值

如何使用左边缘或右边缘而不是中心分配 jQuery 滑块句柄值?