noUiSliderで最小値以下、最大値以上の場合にテキストフィールドの値を空にする

noUiSliderとは

https://refreshless.com/nouislider/

noUiSliderはjQuery UIからSlider機能だけを抜き出したようなプラグインです。
名前もそのままです。ZOZOTOWNでも検索の絞り込みに使われてますね。

この機能のためだけにjQuery UIを入れるのは容量的に無駄が多いので、
単一のプラグインがあるのは嬉しいですね。

因みに検索の時に「スライダー」とすると、カルーセルが沢山が出てきます。
「レンジスライダー」と検索すると良いようです。

動作デモ

初めにデモをご覧ください。

See the Pen WGdKjo by leo (@leo-trym) on CodePen.

ソース

HTML

<div id="noUiSlider">
  <input type="number" name="space_low" step="5" id="min" class="area" placeholder="下限なし" value=""><span>~</span>
  <input type="number" name="space_high" step="5" id="max" class="area" placeholder="上限なし" value=""><span></span>
  <div id="range"></div>
</div>

JS

var $slider = $('#range').get(0); //スライダー要素
var $min = $('#min'); //最小値のテキストフィールド
var $max = $('#max'); //最大値のテキストフィールド
var minVal = 0; //最小値
var maxVal = 1000; //最大値
var gap = 5; // 数値を5刻みにする

//noUiSliderをセット
noUiSlider.create($slider, {
  start: [ minVal - gap, maxVal + gap ], //
  connect: true,
  step: gap,
  range: {
    'min': minVal - gap, //最小値を-5
    'max': maxVal + gap  //最小値を+5
  },
  pips: {
    mode: 'range',
    density: gap
  }
});

//noUiSliderイベント
$slider.noUiSlider.on('update', function( values, handle ) {

  //現在の最小値・最大値を取得
  var value = Math.floor(values[handle]);

  if ( handle ) {
    $max.get(0).value = value; //現在の最大値
  } else {
    $min.get(0).value = value; //現在の最小値
  }

  //noUiSlider下部の数値変更(そのままだと+-5の数値が表示されるため)
  $('.noUi-value-large').text(minVal);
  $('.noUi-value-large:last-child').text(maxVal);

  //最小値以下・最大値以上でinputを空にする
  if ( $min.get(0).value <= minVal || $min.get(0).value > maxVal ){
    $min.val('');
  }
  if ( $max.get(0).value <= minVal || $max.get(0).value > maxVal ){
    $max.val('');
  }

});

//最小値をinputにセット
$min.get(0).addEventListener('change', function(){
  $slider.noUiSlider.set([this.value, null]);
});

//最大値をinputにセット
$max.get(0).addEventListener('change', function(){
  $slider.noUiSlider.set([null, this.value]);
});

まとめ

以前の仕事で苦心して出来たのが上記のソースです。
あまり情報が無かったので、公式サイトのリファレンスとにらめっこで作りました。

不動産関係のページだったため、この動作と合わせて
坪と平米の変換も行わなくてはならず、さらに苦労しました。

そちらは長くなるため説明は控えて、デモを張っておきます。
あまりきれいなソースではありませんが。。

See the Pen noUiSlider2 by leo (@leo-trym) on CodePen.

Writer

KO

誕生日に会社のみんなから『世界文学全集』をプレゼントしてもらった読書好きフロントエンド・エンジニアです。WordPressとMovableTypeが得意ですが、本当の特技は薪割りです。

Contact

ご提案依頼、ご相談、お見積もりなど
お気軽にお問合わせください。

03-6403-3259

平日 10:00~19:00

「Web制作について」とお伝え頂ければ
担当者に取次させていただきます。

Mailform

contact@trym.jp
でも受け付けております。