13

jquery-ui スライダーを横スクロール バーとして使用していますが、ハンドルがエンド ガターを超えてスライドするという問題があります (スライダーを一番右にスライドすると、ここで確認できます)。CSS で考えられるすべてのことを試して、ハンドルがガターを超えないようにしましたが、役に立ちませんでした。どんな提案でも大歓迎です。

明確にするために、問題を示す次の図を追加します (ハンドルが小さいため非常にわかりにくいですが、CSS で大きなハンドルを作成すると、ハンドルは ガターの幅のちょうど半分になります)。

これが問題のjsbinです。基本的に、ハンドルはガター内にとどめたいと思っています。

代替テキスト

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
<link href="http://code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.min.css" rel="stylesheet" type="text/css" />
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="http://code.jquery.com/ui/1.10.4/jquery-ui.min.js"></script>

  <style type="text/css">

  .demo {
     width: 800px;
     margin: 50px auto 0 auto;
  }



  .ui-slider-horizontal  {
    background: #DFEFFC none repeat scroll 0 0;
  }

  .ui-slider .ui-slider-handle {
    background-image:url(http://img207.imageshack.us/img207/7760/sliderhandle.png);
    cursor:default;
    height:15px;
    position: absolute;
    width:27px;
    z-index:2;   
    margin-left: -1px;
    margin-top: 3px;
  }

  .ui-slider 
  {
    position:relative;
    text-align:left;
  }


  </style>
  <script type="text/javascript">
  $(document).ready(function(){
    $("#slider").slider({
    slide: function( event, ui ) {      

            //normalise handle position between 0 and 1 relative to slider width
            var range = $("#slider").width();//width of slider
            var normalised = $("#slider1handle").position().left / range;

            //normalise between desired range: 0:HandleWidth
            var range2 = $("#slider1handle").width();
            normalised = (normalised*range2) + 1;      

            var marginAmount = -1*normalised;
            $("#slider1handle").css("margin-left", marginAmount);      
        }

    });
    $('a.ui-slider-handle').attr('id', "slider1handle");



  });
  </script>
</head>
<body>
<div class="demo">
  <div id="slider"></div>
</div>
</body>
</html>
4

9 に答える 9

14

ハンドルはガターを越えてちょうどその幅に行きます

ちょうどその幅の半分に近いので、実際にはスライダーの端を超えて移動していません。スクリーンショットを正しく配置すると、非常に正確な設定であると予想されるように、ハンドルの中心がスライダーの端にあることがわかります。左が 0% で右が 100% の場合、100% を選択できるように、ハンドルを端を少し越えて移動する必要があります。

スライダーの終わりを示す線付きの jQuery スライダー

ハンドルを大きくする場合も同様です。あなたの場合、ハンドルが右端で幅の半分以上移動する場合、左端で半分未満しか伸びないと思いますか? CSS を少しいじると、次のような巨大なハンドルでも同じ効果が得られます。

.ui-slider-horizo​​ntal .ui-state-default {
  /** デフォルト:
      マージン左: -0.6em;
      上: -0.3em;
  */
  幅: 69px;
  高さ: 140px;
  左マージン: -39px;
  上: -68px;
}

ちょっとしたハックである矢印を使用すると、さらに適切に表示されます。

.ui-slider-horizo​​ntal .ui-state-default {
  幅: 40px;
  マージン左: -20px;
  上: 15px;
  背景色: 白;
  背景画像: url('http://i.stack.imgur.com/ObK9i.png');
  バックグラウンドリピート: リピートなし;
  ボーダー: 0;
}

ガターを表示する矢印付きのスライダー

ただし、scrollbar としての使用法については、スライダー scrollbar demoを参照してください。スライダーを使用して、ページ上のコンテンツの位置を操作します。この場合、必要に応じて値を取得できるスクロールバーとして機能します。

于 2009-08-28T16:53:28.780 に答える
3

スライダーのどちらかの端にキャップを追加すると、スライダー自体について何も変更せずに効果を模倣できます。

<div class="cap left"></div>
(slider container here)
<div class="cap right"></div>

非常に基本的なCSSを追加するだけです...

.cap {
    width: (half the handle width)
}
.ui-slider, .cap.left, .cap.right {
    float: left;
}
.ui-slider {
    width: (desired total gutter width - handle width);
}
.ui-slider-handle {
    margin-left: -(half the handle width);
}

...次に、それに応じてキャップのスタイルを設定します。

1 つのスライダーでレンジ シェーディングを行うには、通常のガターの代わりにレンジ エフェクトを使用して左側のキャップのスタイルを設定します。

于 2011-05-05T17:46:02.807 に答える
1

私は同じ問題を抱えていましたが、私の解決策は非常に簡単だと思います。Dr.Gibbs が言ったように、ドラッグ可能なスライダー ハンドルの格納はデフォルトで「親」に設定されています。cssを使えば克服できるので...

考慮ハンドルimg100pxあり、収納div250px広いです。コンテインメントよりdivも、幅の値が 250 - 100 = 150px でありmargin-right:100px、maxZoom img が正しい場所に表示されるようにする必要があります。ハンドル画像の正確な制限があるより...

于 2011-05-31T20:00:05.243 に答える
0

私がそれを処理した簡単な方法は、スライダー トラックを透明にし、個別にスタイルを設定できる背景レイヤーを追加することでした。

HTML

<div class="slider-container">
  <div class="slider-background"></div>
  <div id="slider"></div>
</div>

CSS

.slider-container {
  position: relative;
}
.slider-background {
  position: absolute;
  top: 0;
  left: 10px;
  background: blue;
}
#slider {
  background: transparent;
}
于 2015-08-11T18:26:59.720 に答える
0

私にとってはこれが機能します:

var $Slide = jQuery('#StatusSlide');
$Slide.slider({
  slide: function(event, ui) {
    /* Fix handler to be inside of slider borders */
    var $Handle = $Slide.find('.ui-slider-handle');
    $Handle.css('margin-left', -1 * $Handle.width() * ($Slide.slider('value') / $Slide.slider('option', 'max')));
  }
});
/* Fix handler to be inside of slider borders */
var $Handle = $Slide.find('.ui-slider-handle');
$Handle.css('margin-left', -1 * $Handle.width() * ($Slide.slider('value') / $Slide.slider('option', 'max')));
于 2014-10-19T14:05:37.607 に答える
0

解決策を見つけました。しかし最初に、シングル スライダーとレンジ スライダーで同じ問題が発生しました。CSS を適用しても機能せず、Javascript-Fix-Approach も機能しませんでした。

私にとっての解決策は次のとおりです。スライド領域はスクロールバーの幅の 100% です。したがって、スライダーの幅が 100px で、それを「50」に設定すると、ハンドルの「左マージン」は 50% になります。200px の場合、20 に設定すると、10% などになります。

ハンドルの leftmargin を計算し、 with を減らし、標準の leftmargin を追加するコードを探しました。

選択したエディターで jquery-ui.js を開き、行 ~13170 に移動して、関数 _refreshValue を見つけます。「valPercent」の最初の出現を検索することもできます「valPercent = .....」行の後に、次を追加しました。

valPercent = valPercent * 0.95 + 3.1;

これにより、Handled がレンジとガターの内側に完全に収まりました。使用する ui-template に応じて最適な設定を得るために値をいじる必要があるかもしれませんが、少なくともこれは

画像を投稿するには評判が必要なので、私が描いたものへのリンクを次に示します。

http://www.germanunique.com/slider.png

これについてサポートが必要な場合は、info@germanunique.com にメールを送信するか、返信を残してください。これは、StackOveflow での最初の投稿でした。同じ問題を抱えている人に役立つことを願っています。

さよなら !

于 2013-07-21T22:44:50.743 に答える
0

これは古い投稿であることは認識していますが、この問題に直面したときに、はるかに簡単な解決策を見つけました。

ハンドルは純粋に視覚的な要素であるため、ハンドルをハンドルのmargin-leftマイナス半分に設定しwidthます。これで、スライドレールの端の中央に正しく配置されます。

例えば:

#slider-handle { width: 4rem; margin-left: -2rem; }
于 2018-07-03T03:56:03.413 に答える
-1

または、次のように数学で行うこともできます。

slide: function(event, ui) {
    $(ui.handle).html("<span class='ui-corner-all hover'>"+ui.value+"</span>");
    fix_slider(ui.handle,ui.value);
},
function fix_slider(slider,value) {
    var $.slider_decalatio = 0.35 // for an width of 27px
    var pos_calc = $.slider_decalation * value; // y = ax;
    $(slider).find('span').css("left",pos_calc + "px");
});

これは改善できますが、簡単に修正できます。

于 2010-11-21T11:24:38.963 に答える
-2

.ui-slider-handle クラス要素の量に等しい "padding-right" をスライダーに追加するだけです。

#slider {
 height: 20px;
 width: 150px;
 background: #ccc;
 padding-right: 20px; (equal to the width of the handle below)
}
.ui-slider .ui-slider-handle {
  height: 20px;
  width: 20px;
  background: #333;
  display: block;
  position: relative;
}
于 2013-04-26T16:42:56.813 に答える