如何保持我的自定义范围/滑块跟随器div在Vanilla JavaScript

时间:2016-02-18 19:19:53

标签: javascript html css

我花了一些时间在一个滑块上工作,滑块上有一个div跟随滑块的拇指。我通过为关注者创建一个相对定位的容器(称为#slider-follower-cntnr)来做到这一点。然后,我根据范围输入的值调整跟随div(#slider-follower)的位置。问题是当你将拇指移过轨道时,跟随者不能完全对准拇指的位置。我已经尝试调整#slider-follower-cntnr的宽度,但我不知道如何找到正确的宽度以保持其完美居中。谢谢你的帮助。

TL / DR :如何将跟随器div完全置于所有范围值范围输入的拇指上?

Heres a codepen.当您沿着范围拉动时,您可能需要全屏查看它是否偏离中心。

HTML

<div id="slider-cntnr">
  <input type="range" id="frame-slider" oninput="updateFollowerValue(this.value)" />
  <div id="slider-follow-cntnr">
    <div id="slider-follow">
      <div id="slider-val-cntnr">
        <span id="slider-val"></span>
      </div>
    </div>
  </div>
</div>

JS

var follower = document.getElementById('slider-follow');
var follower_val = document.getElementById('slider-val');
var slider = document.getElementById('frame-slider');

var updateFollowerValue = function(val) {
  follower_val.innerHTML = val;
  follower.style.left = (val*1) + '%';
};

updateFollowerValue(slider.value);

CSS

html, body {
  width: 100%;
  height: 100%;
}

#slider-cntnr {
  width: 80%;
  margin: 40px;
  position: relative;
  display: flex;
  flex-direction: column;
  background: orange;
}

#frame-slider {
  width: 100%;
  margin: 0;
}

#slider-follow-cntnr {
  position: relative;
  background-color: blue;
  height: 10px;
  margin: 0 auto;
  width: 98%;
}

#slider-follow {
  background-color: black;
  width: 30px;
  height: 50px;
  display: flex;
  justify-content: center;
  align-items: center;
  position: absolute;
  margin-left: -15px;
}

#slider-val-cntnr {
  background-color: white;
  width: 25px;
  height: 20px;
}

#slider-val {
  margin-left: 9px;
}

1 个答案:

答案 0 :(得分:0)

您可以通过以下几种方式解决此问题:

(1)在HTML中

  <div id="slider-val-cntnr">
    <center>
    <span id="slider-val"></span>
    </center>
  </div>

(2)在CSS中

#slider-val {
  margin-left: auto;
  margin-right: auto;
}

(1)HTML方法可能效果最好,但在整个HTML中使用<center>标记通常不是最佳做法。

(2)这将确保数字永远不会超出它所在的白盒的范围。如果你不关心它是绝对居中的,只想让数字不退出框,那么这是一个合适的解决方案。