如何停止把手挂在滑块上?

How to stop handle over hanging the slider?

我正在使用 jQuery Slider 和自定义句柄。

我的手柄很大,这意味着如果你一直向右拖动它,它就会悬在滑块的末端...

使用如下方法:

margin-left:-50%;

仅适用于位于右侧 (100%) 的情况,但如果您将其向左移动,则负边距会将其拉出该侧的屏幕。

如何在保持响应的同时解决这个问题?如果有意义的话,我想得到它,以便 handle/image 的末端与每个条的末端平行。

var handle = $("#custom-handle");
$("#slider").slider({
  create: function() {
    handle.text($(this).slider("value"));
  },
  slide: function(event, ui) {
    handle.text(ui.value);
  }
});
#custom-handle {
  width: 20%;
  background: transparent;
  height: 57px;
  background-image: url(https://s3-eu-west-1.amazonaws.com/quizdu/redslider.png);
  top: 0%;
  border: none;
  margin-top: -1.8em;
  background-size: 100%;
  text-align: center;
  line-height: 1.6em;
}

.container {
  max-width: 500px;
  margin: 0 auto;
}

body {
  padding-top: 50px;
  background: grey;
}
<link href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<div class="container">
  <div id="slider">
    <div id="custom-handle" class="ui-slider-handle"></div>
  </div>
</div>

如果将该值转换为百分比,并将其乘以手柄的宽度,则可以将其用作偏移量

var handle = $("#custom-handle"),
    handleWidth = handle.width();
$("#slider").slider({
  create: function() {
    handle.text($(this).slider("value"));
  },
  slide: function(event, ui) {
    handle.text(ui.value);
    handle.css({
        'margin-left': 0 - ((ui.value / 100) * handleWidth)
    });
  }
});
#custom-handle {
  width: 20%;
  background: transparent;
  height: 57px;
  background-color: #0099ff;
  top: 0%;
  border: none;
  margin-top: -1.8em;
  background-size: 100%;
  text-align: center;
  line-height: 1.6em;
}

.container {
  max-width: 500px;
  margin: 0 auto;
}

body {
  padding-top: 50px;
  background: grey;
}
<link href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<div class="container">
  <div id="slider">
    <div id="custom-handle" class="ui-slider-handle"></div>
  </div>
</div>