ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

实现 div 元素内容超出可通过滚轮上下滑动从而使元素横向滚动

2022-09-17 00:30:08  阅读:213  来源: 互联网

标签:滚轮 元素 scrollWidth scrollLeft delegateTarget 滑动 div


移动端中的元素内容超出时,对容器设置overflow-x: auto就可以通过手势水平移动。但是 PC 端只能通过鼠标滚轮上下滑动,而不能水平移动。

只需要给元素添加一个监听鼠标滚轮事件,上下滑动时修改其 scrollLeft 属性值就可以实现。直接贴上代码:

<div class="horizontal-slip-el">
  <div class="child-el">首页</div>
  <div class="child-el">日记</div>
  <div class="child-el">随笔</div>
  <div class="child-el">标签</div>
  <div class="child-el">管理</div>
  <div class="child-el">说说</div>
</div>
.horizontal-slip-el {
  display: flex;
  align-items: center;
  justify-content: space-between;
  align-content: center;
  flex-direction: row;
  flex-wrap: nowrap;
  white-space: nowrap;
  overflow-x: auto;
  overflow-y: hidden;
  width: 300px;
  padding: 10px;
}

.child-el {
  padding: 10px;
  margin: 0 10px;
  width: 80px;
  border-radius: 6px;
  border: 1px solid #cccccc;
}
$(".horizontal-slip-el").on("mousewheel", e => {
  let scrollLeft = e.delegateTarget.scrollLeft;
  let scrollWidth = e.delegateTarget.scrollWidth - e.delegateTarget.offsetWidth;
  if (e.originalEvent.deltaY < 0) {
    if (scrollLeft >= 0) {
      scrollLeft -= 20;
      $(e.delegateTarget).animate({ scrollLeft }, 40, "linear");
    }
  } else {
    if (scrollLeft <= scrollWidth) {
      scrollLeft += 20;
      $(e.delegateTarget).animate({ scrollLeft }, 40, "linear");
    }
  }
});

最主要的就是获得鼠标滚轮事件中的 delegateTarget 对象和 originalEvent 对象。delegateTarget 就是触发滚动事件的元素。元素不溢出的宽度是 scrollWidth,溢出的内容的宽度是 scrollLeft。scrollWidth - scrollLeft = maxWidth,maxWdith 就是最多只能把 scrollLeft +=到 maxWidth。

originalEvent 有一些属性可以判断滚轮到底是朝着哪个方向滑动。其中 deltaY 小于 0 代表朝上滑动,反之朝下滑动。

image

标签:滚轮,元素,scrollWidth,scrollLeft,delegateTarget,滑动,div
来源: https://www.cnblogs.com/Enziandom/p/16701745.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有