JS实现容器模块左右拖动效果


Posted in Javascript onJanuary 14, 2020

本文实例为大家分享了JS实现容器模块左右拖动效果的具体代码,供大家参考,具体内容如下

JS实现容器模块左右拖动效果

实际效果是 鼠标点击上方颜色模块,左右拖动,根据拖动的距离来显示模块
一共有7个颜色块

代码如下

CSS

#box {
  /*margin: 0 auto;*/
  width: 1750px;
  border: 1px solid black;
  display: block;
  position: relative;
  left: 0;
  }

  #box>div {
  width: 250px;
  height: 50px;
  display: inline-block;
  text-align: center;
  float: left;
  }

  h1 {
  padding: 0;
  margin: 0;
  }

Html

<div style="width: 1000px;overflow: hidden;margin: auto;position: relative;">
  <div id="box">
  <div style="background: lemonchiffon;">
   <h1>one</h1></div>
  <div style="background: lightblue;">
   <h1>tow</h1></div>
  <div style="background: gold;">
   <h1>three</h1></div>
  <div style="background: blue;">
   <h1>four</h1></div>
  <div style="background: orange;">
   <h1>five</h1></div>
  <div style="background: aqua;">
   <h1>six</h1></div>
  <div style="background: brown;">
   <h1>seveen</h1></div>
  </div>
  <h1>拖动上面的颜色模块</h1>
 <p>实际原理还是轮播图</p>
</div>
<div style="width: 1000px;overflow: hidden;margin: auto;position: relative;">

注意:最大容器的DIV中宽度设置为1000px 表示展示的内容为1000,超出的被隐藏,根据自己想展示的模块来设计id为‘box'的DIV则为超大宽度的容器,里面模块以浮动形式布局,原理跟轮播图一样'**。

JS

<script src="jquery-2.1.0.js" type="text/javascript" charset="utf-8"></script>
 <script type="text/javascript">
 let box = document.getElementById('box')
 $box = $('#box')
 let mouseState = false; //鼠标默认状态
 let startX = 0;
 let startY = 0;
 let moveDirection = 0 //鼠标拖动距离
 $boxLeft = parseInt($box.css('left'))//表示内容块被偏移的值
 //鼠标按下事件
 box.addEventListener('mousedown', function(e) {
  //更改鼠标状态
  //参数e为鼠标
  mouseState = true
  //获取鼠标坐标
  startX = e.clientX
  startY = e.clientY
  //鼠标拖动初始化
  moveDirection = 0
  $boxLeft = parseInt($box.css('left'))
 })
 //鼠标移动状态
 box.addEventListener('mousemove', function(e) {
  //判断鼠标是不是被按下中移动
  if(mouseState) {
  //判断是向左还是向右拖动鼠标
  moveDirection = e.clientX - startX
  //向右移动
  box.style.left = $boxLeft + moveDirection + 'px'
  }
 })
 //鼠标弹起事件
 box.addEventListener('mouseup', function(e) {
  mouseState = false
  if(moveDirection > 0) {
  //$boxLeft<0表示已经看到最左的模块,不能在向右拖拉
  $boxLeft = parseInt($box.css('left'))
  //取余,比如拖动了52px,实际内容块就250px,偏移余下的px就能看的完整的内容块
  $num = $boxLeft % 250
  if($boxLeft < 0) {
   $box.animate({
   left: $boxLeft - $num + 'px'
   }, 500, function() {
   console.log(parseInt($box.css('left')))
   })
  } else {
  //向右偏移,如果$boxLeft大于等于0的话 那就是还是第一个颜色模块,不允许被偏移
   $box.animate({
   left: 0 + 'px'
   }, 500, function() {})
  }
  } else if(moveDirection < 0) {
  //$boxLeft>-750表示已经看到最右边的模块,不能在向左拖拉
  $boxLeft = parseInt($box.css('left'))
  $num = 250 + $boxLeft % 250
  if($boxLeft > -750) {
   $box.animate({
   left: $boxLeft - $num + 'px'
   }, 500, function() {
   console.log(parseInt($box.css('left')))
   })
  }else{
  //向左偏移,如果$boxLeft小于等于-750px的话 那就是最后一个颜色模块,不允许被偏移
   $box.animate({
   left: -750 + 'px'
   }, 500, function() {})
  }
  }
 })
</script>

OK了。应该能看的懂了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript下数值型比较难点说明
Jun 07 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
May 24 Javascript
JS获取地址栏参数的小例子
Aug 23 Javascript
Vue从TodoList中学父子组件通信
Feb 05 Javascript
浅谈Vuex注入Vue生命周期的过程
May 20 Javascript
过滤器vue.filters的使用方法实现
Sep 18 Javascript
vue 实现走马灯效果
Oct 28 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
Apr 10 Javascript
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
Aug 10 Javascript
JS如何操作DOM基于表格动态展示数据
Oct 15 Javascript
让Vue响应Map或Set的变化操作
Nov 11 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
Nov 16 Javascript
vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多(步骤详解)
Jan 14 #Javascript
vue页面加载时的进度条功能(实例代码)
Jan 13 #Javascript
微信小程序canvas截取任意形状的实现代码
Jan 13 #Javascript
js实现列表向上无限滚动
Jan 13 #Javascript
vue 组件销毁并重置的实现
Jan 13 #Javascript
VUE实现自身整体组件销毁的示例代码
Jan 13 #Javascript
微信小程序聊天功能的示例代码
Jan 13 #Javascript
You might like
php的字符串用法小结
2010/06/08 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
PHP异常类及异常处理操作实例详解
2018/12/19 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
用javascript动态调整iframe高度的代码
2007/04/10 Javascript
jQuery Dialog 弹出层对话框插件
2010/08/09 Javascript
js Array操作的最简短最容易理解方法
2013/12/09 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
详解angular应用容器化部署
2018/08/14 Javascript
详解ES6 Fetch API HTTP请求实用指南
2018/11/14 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
vue:el-input输入时限制输入的类型操作
2020/08/05 Javascript
python正常时间和unix时间戳相互转换的方法
2015/04/23 Python
python动态加载包的方法小结
2016/04/18 Python
python 创建弹出式菜单的实现代码
2017/07/11 Python
python如何压缩新文件到已有ZIP文件
2018/03/14 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
python使用opencv驱动摄像头的方法
2018/08/03 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
Python如何省略括号方法详解
2020/03/21 Python
Django用户登录与注册系统的实现示例
2020/06/03 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
Python常用类型转换实现代码实例
2020/07/28 Python
如何在Anaconda中打开python自带idle
2020/09/21 Python
python调用百度API实现人脸识别
2020/11/17 Python
Hotels.com英国:全球领先的酒店住宿提供商
2019/01/24 全球购物
大专应届生个人简历的自我评价
2013/10/15 职场文书
公司担保书范文
2014/05/21 职场文书
安全目标责任书
2014/07/22 职场文书
2014年班主任德育工作总结
2014/12/05 职场文书
员工升职自荐信
2015/03/27 职场文书
医院党建工作总结2015
2015/05/26 职场文书
图书馆义工感想
2015/08/07 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书