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 相关文章推荐
彪哥1.1(智能表格)提供下载
Sep 07 Javascript
总结AJAX相关JS代码片段和浏览器模型
Aug 15 Javascript
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
Dec 23 Javascript
不同浏览器对回车提交表单的处理办法
Feb 13 Javascript
jquery getScript动态加载JS方法改进详解
Nov 15 Javascript
JS实现图片预加载无需等待
Dec 21 Javascript
jquery动态增加删除表格行的小例子
Nov 14 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
Jan 06 Javascript
浅谈node.js中async异步编程
Oct 22 Javascript
Jquery插件easyUi实现表单验证示例
Dec 15 Javascript
jquery mobile界面数据刷新的实现方法
May 28 Javascript
Vue 父子组件的数据传递、修改和更新方法
Mar 01 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 UTF8 文件的签名问题
2009/10/30 PHP
php判断是否为ajax请求的方法
2016/11/29 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
详解关于php的xdebug配置(编辑器vscode)
2019/01/29 PHP
JS类库Bindows1.3中的内存释放方式分析
2007/03/08 Javascript
JavaScript 自动完成脚本整理(33个)
2009/10/20 Javascript
基于jquery的一个OutlookBar类,动态创建导航条
2010/11/19 Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
2011/10/23 Javascript
js模仿jquery的写法示例代码
2013/06/16 Javascript
快速解决jQuery与其他库冲突的方法介绍
2014/01/02 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
2016/05/20 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
Bootstrap缩略图与警告框学习使用
2017/02/08 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
2019/05/16 Javascript
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
js实现验证码功能
2020/07/24 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
Python实现某论坛自动签到功能
2019/08/20 Python
Python使用type动态创建类操作示例
2020/02/29 Python
python 实现人和电脑猜拳的示例代码
2020/03/02 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
2020/04/15 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
Pyqt助手安装PyQt5帮助文档过程图解
2020/11/20 Python
python中的时区问题
2021/01/14 Python
IRO美国官网:法国服装品牌
2018/03/06 全球购物
June Jacobs尊积帕官网:知名的spa水疗护肤品牌
2019/03/21 全球购物
Yahoo-PHP面试题2
2014/12/06 面试题
部队2015年终工作总结
2015/04/02 职场文书
答辩状格式范本
2015/05/22 职场文书
七年级作文之下雨天
2019/12/23 职场文书
OpenCV-Python模板匹配人眼的实例
2021/06/08 Python