JavaScript限定范围拖拽及自定义滚动条应用(3)


Posted in Javascript onMay 17, 2017

两个对象:div1 和 div2,其中div1是div2的父元素,div2只能在div1的范围内拖拽

JavaScript限定范围拖拽及自定义滚动条应用(3)

图中,红点是鼠标的位置,两个绿色箭头相减的结果就是disX,最后oEvent.clientX - disX 就是绿色箭头的部分,这个长度就是判断是否“出格”的依据,也就是这个短的绿色箭头范围应该在0 ~ div2.offsetWidth - div1.offsetWidth之间!

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>客户区可见范围限制拖拽</title>
 <style type="text/css">
  * {
   padding: 0;
   margin: 0;
  }
  #div1 {
   width: 500px;
   height: 500px;
   background: orange;
   position: relative;
   left: 100px;
   top: 30px;
  }
  #div2 {
   width: 100px;
   height: 100px;
   background: black;
   position: absolute;
   border: 1px solid blue;
  }
 </style>
</head>
<body>
 <div id="div1">
  <div id="div2"></div>
 </div>

 <script type="text/javascript">
  var oDiv1 = document.getElementById('div1');
  var oDiv2 = document.getElementById('div2');

  function getStyle(obj, attr) {
   if (obj.currentStyle) {
    return obj.currentStyle[attr];
   } else {
    return getComputedStyle(obj, null)[attr];
   }
  }
  oDiv2.onmousedown = function(ev) {
   var oEvent = ev || event;
   // var disX = oEvent.clientX - oDiv2.offsetLeft;
   // var disY = oEvent.clientY - oDiv2.offsetTop;
   var disX = oEvent.clientX - parseInt(getStyle(oDiv2, 'left'));
   var disY = oEvent.clientY - parseInt(getStyle(oDiv2, 'top'));

   document.onmousemove = function(ev) {
    var oEvent = ev || event;
    var l = oEvent.clientX - disX;
    var t = oEvent.clientY - disY;


    if (l < 0) {
     l = 0;
    } else if (l > oDiv1.offsetWidth - /*parseInt(getStyle(oDiv2,'width'))*/oDiv2.offsetWidth) {
     l = oDiv1.offsetWidth - oDiv2.offsetWidth;
    }
    if (t < 0) {
     t = 0;
    } else if (t > oDiv1.offsetHeight - oDiv2.offsetHeight) {
     t = oDiv1.offsetHeight - oDiv2.offsetHeight;
    }
    oDiv2.style.left = l + 'px';
    oDiv2.style.top = t + 'px';
   };


   document.onmouseup = function() {
    document.onmousemove = null;//如果不取消,鼠标弹起div依旧会随着鼠标移动
    document.onmouseup = null;
   };
  };
 </script>
</body>
</html>

基于上述原理,我们来做一个自定义滚动条,通过拖拽滚动条的位置来控制另一个对象的大小,比如一幅图。

JavaScript限定范围拖拽及自定义滚动条应用(3)

JavaScript限定范围拖拽及自定义滚动条应用(3)

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>自定义滚动条</title>
 <style type="text/css">
 #div1 {
  width: 600px;
  height: 20px;
  background: orange;
  position: relative;
  margin: 50px auto;
 }
 #div2 {
  width: 20px;
  height: 20px;
  background: green;
  position: absolute;
 }
 #div3 {
  width: 0;
  height: 0;
  margin: 20px auto;
 }
 #div3 img {
  width: 100%;
  height: 100%;
 }
 </style>
</head>
<body>
 <div id="div1">
 <div id="div2"></div>
 </div>
 <div id="div3">
 <img src="https://timgsa.baidu.com/141128%2F201411281041075742.jpg">
 </div>
 <script type="text/javascript">
 var oDiv1 = document.getElementById('div1');
 var oDiv2 = document.getElementById('div2');
 var oDiv3 = document.getElementById('div3');
 oDiv2.onmousedown = function(ev) {
  var oEvent = ev || event;
  var disX = oEvent.clientX - oDiv2.offsetLeft;

  document.onmousemove = function(ev) {
  var oEvent = ev || event;
  var l = oEvent.clientX - disX;
  if (l < 0) {
   l = 0;
  } else if (l > oDiv1.offsetWidth - oDiv2.offsetWidth) {
   l = oDiv1.offsetWidth - oDiv2.offsetWidth;
  }
  oDiv2.style.left = l + 'px';//l范围:[0,580]
  //document.title = l / 580; //范围:[0,1]
  var ratio = oDiv1.offsetWidth - oDiv2.offsetWidth;
  var scale = l / ratio;
  var w = 600 * scale;
  var h = 370 * scale;
  console.log(w);
  oDiv3.style.cssText = ';width:' + w + 'px;height:' + h +'px;';

  };

  document.onmouseup = function() {
  document.onmousemove = null;
  document.onmouseup = null;
  };
 };
 </script>
</body>
</html>

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

Javascript 相关文章推荐
javascript中的array数组使用技巧
Jan 31 Javascript
JavaScript插入动态样式实现代码
Feb 22 Javascript
js 实现日期灵活格式化的小例子
Jul 14 Javascript
onkeyup,onkeydown和onkeypress的区别介绍
Oct 21 Javascript
jQuery取得select选择的文本与值的示例
Dec 09 Javascript
js实现遮罩层弹出框的方法
Jan 15 Javascript
jquery小火箭返回顶部代码分享
Aug 19 Javascript
jQuery滑动到底部加载下一页数据的实例代码
May 22 jQuery
jQuery第一次运行页面默认触发点击事件的实例
Jan 10 jQuery
JS实现的input选择图片本地预览功能示例
Aug 29 Javascript
Vue事件处理原理及过程详解
Mar 11 Javascript
JavaScript如何实现图片处理与合成
May 29 Javascript
Vue.js鼠标悬浮更换图片功能
May 17 #Javascript
12个非常有用的JavaScript技巧
May 17 #Javascript
Javascript中的async awai的用法
May 17 #Javascript
ES6入门教程之Iterator与for...of循环详解
May 17 #Javascript
angular.fromJson与toJson方法用法示例
May 17 #Javascript
Node.js编写CLI的实例详解
May 17 #Javascript
ES6入门教程之Class和Module详解
May 17 #Javascript
You might like
php学习笔记 数组遍历实现代码
2011/06/09 PHP
php实现微信分享朋友链接功能
2019/02/18 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
2019/02/28 PHP
javascript之学会吝啬 精简代码
2010/04/25 Javascript
jQuery数组处理方法汇总
2011/06/20 Javascript
基于jquery的一个拖拽到指定区域内的效果
2011/09/21 Javascript
onkeydown事件解决按回车键直接提交数据的需求
2013/04/11 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
jquery 鼠标滑动显示详情应用示例
2014/01/24 Javascript
javascript数字时钟示例分享
2014/04/23 Javascript
浅析javascript的return语句
2015/12/15 Javascript
AngularJS 使用$sce控制代码安全检查
2016/01/05 Javascript
JavaScript实现简单的tab选项卡切换
2016/01/05 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
微信小程序 石头剪刀布实例代码
2017/01/04 Javascript
Vue.js组件通信的几种姿势
2017/10/23 Javascript
快速解决angularJS中用post方法时后台拿不到值的问题
2018/08/14 Javascript
vue实现简单的日历效果
2020/09/24 Javascript
深入理解Python对Json的解析
2017/02/14 Python
python实现微信发送邮件关闭电脑功能
2018/02/22 Python
Python变量赋值的秘密分享
2018/04/03 Python
Python中GIL的使用详解
2018/10/03 Python
python如何实现复制目录到指定目录
2020/02/13 Python
python实现翻译word表格小程序
2020/02/27 Python
Python下载的11种姿势(小结)
2020/11/18 Python
Python命令行参数argv和argparse该如何使用
2021/02/08 Python
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
英国综合网上购物商城:The Hut
2018/07/03 全球购物
武汉世纪畅想数字传播有限公司.NET笔试题
2014/07/22 面试题
EJB与JAVA BEAN的区别
2016/08/29 面试题
工程造价专业大专生求职信
2013/10/06 职场文书
中学生检讨书范文
2014/11/03 职场文书
2014年幼儿园安全工作总结
2014/11/10 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
秋季运动会加油词
2015/07/18 职场文书
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers