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 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
May 18 Javascript
动态加载js的方法汇总
Feb 13 Javascript
JavaScript实现打字效果的方法
Jul 10 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
Jun 01 Javascript
关于验证码在IE中不刷新的快速解决方法
Sep 23 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
Nov 29 Javascript
EditPlus中的正则表达式 实战(4)
Dec 15 Javascript
JS鼠标滚动分页效果示例
Jul 05 Javascript
基于JavaScript实现无缝滚动效果
Jul 21 Javascript
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
Mar 13 Javascript
js实现一个简易计算器
Mar 30 Javascript
node.js使用express-fileupload中间件实现文件上传
Jul 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
详解WordPress中用于更新和获取用户选项数据的PHP函数
2016/03/08 PHP
php源码的安装方法和实例
2019/09/26 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
2013/07/09 Javascript
JavaScript新窗口与子窗口传值详解
2014/02/11 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
javascript动画算法实例分析
2015/07/31 Javascript
Jquery实现顶部弹出框特效
2015/08/08 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
javascript实现无法关闭的弹框
2016/11/27 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
微信小程序 MD5的方法详解及实例代码
2017/03/10 Javascript
详谈AngularJs 控制器、数据绑定、作用域
2017/07/09 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
ES10的13个新特性示例(小结)
2019/09/23 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
Python3.6正式版新特性预览
2016/12/15 Python
python如何将图片转换为字符图片
2020/08/19 Python
python获取微信小程序手机号并绑定遇到的坑
2018/11/19 Python
python机器人运动范围问题的解答
2019/04/29 Python
Python实现CNN的多通道输入实例
2020/01/17 Python
Scrapy框架基本命令与settings.py设置
2020/02/06 Python
django配置app中的静态文件步骤
2020/03/27 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
Pycharm同步远程服务器调试的方法步骤
2020/11/04 Python
Python实现冒泡排序算法的完整实例
2020/11/04 Python
I.T中国官网:精选时尚设计师单品网购平台
2018/03/26 全球购物
澳大利亚女装精品店:Alannah Hill
2020/07/29 全球购物
护理学毕业生自荐信
2013/10/02 职场文书
财务会计专业个人求职信范本
2014/01/08 职场文书
企业总经理职责
2014/02/02 职场文书
国庆节标语大全
2014/10/08 职场文书