首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >限制在两点之间移动x轴滚动条

问限制在两点之间移动x轴滚动条
EN

Stack Overflow用户
提问于 2017-11-02 16:23:35
回答 1查看 134关注 0票数 3

我创建了一个图像轮播,它在那里显示图像,并通过x轴滚动条显示其他图像。它工作正常,但我想限制滚动条只在视区内移动。我试过If clause,但它有一个bug,而且不够好!我尝试创建一个类似于carousel的Amazon,但在我的例子中,我遇到了一个问题。我将所有HTML CSS和JS上传到JSfiddle:

​

​

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2017-11-02 17:16:34

我用left和right边距修改了mouse-move事件的if条件。我添加此答案只是为了帮助您当前的实现。

但你不需要重新发明轮子。

有一些库利用本机滚动条来实现这种自定义UI。

一个例子是

https://github.com/buzinas/simple-scrollbar

这只是一个,你可以找到更多。因为这些库有多个填充,在较旧的浏览器上添加了更多支持,并使其具有更好的性能。

​

代码语言:javascript
复制
var div = document.getElementById('movesection');
var isDown = false;
var x1 = 0;
var rightPoint = 0;
var scrollBar = document.querySelector(".feed-scrollbar");
var scrollBarthumb = document.querySelector(".feed-scrollbar-thumb");

div.addEventListener('mousedown', function(e) {
  isDown = true;
  rightPoint = document.getElementById('carousel-viewport').offsetWidth - (div.offsetLeft + div.offsetWidth);
  x1 = e.clientX;
}, true);

document.addEventListener('mouseup', function() {
  isDown = false;
}, true);

document.addEventListener('mousemove', function(event) {
  event.preventDefault();

  var currentPosition = (x1 - event.clientX) + rightPoint;
  var leftMargin = scrollBar.offsetWidth - scrollBarthumb.offsetWidth;
  var rightMargin = 0;

  if (isDown && currentPosition >= rightMargin && currentPosition <= leftMargin) {
    div.style.right = currentPosition + 'px';
  }
}, true);
代码语言:javascript
复制
.carousel {
  width: 100%;
  position: relative;
  overflow: hidden;
  background: #ebebeb;
}

.carousel .carousel-viewport {
  width: 100%;
  min-height: 80px;
  white-space: nowrap;
  overflow: hidden;
  position: relative;
  margin: 0;
}

.carousel .carousel-viewport .carousel-ul {
  display: inline-block;
  position: relative;
  right: 0;
  margin: 0 0 14px;
  padding: 0;
}

.carousel .carousel-viewport .carousel-ul .carousel-card {
  display: inline-block;
  text-align: center;
  min-width: 145px;
  max-width: 270px;
  min-height: 200px;
  overflow: hidden;
  position: relative;
  vertical-align: top;
  word-wrap: break-word;
}

.carousel .carousel-viewport .carousel-ul .carousel-card:before {
  content: "";
  display: inline-block;
  height: 100%;
  vertical-align: middle;
  min-height: inherit;
}

.carousel .carousel-viewport .carousel-ul .carousel-card img {
  width: auto;
  height: auto;
  max-width: 270px;
  max-height: 200px;
  vertical-align: middle;
}

.carousel .carousel-viewport .feed-carousel-control {
  position: absolute;
  top: 55px;
  background-color: #fff;
  height: 100px;
  line-height: 100px;
  width: 45px;
  text-align: center;
  box-shadow: 0 1px 3px #888;
  user-select: none;
  -ms-user-select: none;
  -webkit-user-select: none;
  display: block;
}

.carousel .carousel-viewport .feed-right {
  right: 0;
  border-radius: 3px 0 0 3px;
  clip: rect(-10px, 45px, 110px, -10px);
  padding-left: 5px;
}

.carousel .carousel-viewport .feed-left {
  left: 0;
  border-radius: 0 3px 3px 0;
  clip: rect(-10px, 55px, 110px, 0);
  padding-right: 5px;
}

.carousel .carousel-viewport .feed-arrow {
  display: inline-block;
  line-height: normal;
  vertical-align: top;
  position: relative;
  top: 50%;
  height: 22px;
  width: 13px;
  margin-top: -11px;
}

.carousel .carousel-viewport .feed-scrollbar {
  display: block;
  position: absolute;
  height: 6px;
  bottom: 0;
  left: 0;
  width: 100%;
  user-select: none;
  -ms-user-select: none;
  -webkit-user-select: none;
  font-size: 0;
}

.carousel .carousel-viewport .feed-scrollbar .feed-scrollbar-track {
  display: block;
  background-color: #eee;
  height: 1px;
  border-radius: 4px;
  width: 100%;
  position: relative;
  top: 2px;
  margin: 0;
}

.carousel .carousel-viewport .feed-scrollbar .feed-scrollbar-track .feed-scrollbar-thumb {
  display: block;
  background-color: #aaa;
  height: 6px;
  border-radius: 6px;
  width: 0;
  position: absolute;
  top: -2px;
  margin: 0;
  cursor: pointer;
}
代码语言:javascript
复制
<div class="carousel">
  <div class="carousel-viewport" id="carousel-viewport">
    <span class="feed-scrollbar">
                <span class="feed-scrollbar-track">
                  <span class="feed-scrollbar-thumb" id="movesection" style="width: 200px;right:0;display: block;"></span>
    </span>
    </span>
  </div>
</div>

​

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47070604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档