全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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

图中,红点是鼠标的位置,两个绿色箭头相减的结果就是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>

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

<!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>

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


# js限定范围拖拽  # js自定义滚动条  # js拖拽  # javaScript实现滚动条事件详解  # 原生JS实现自定义滚动条效果  # JS自定义滚动条效果简单实现代码  # js滚动条平滑移动示例代码  # 学习使用jquery iScroll.js移动端滚动条插件  # js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码  # 判断滚动条到底部的JS代码  # JS实现判断滚动条滚到页面底部并执行事件的方法  # js操作滚动条事件实例  # javascript实现自定义滚动条效果  # 鼠标  # 滚动条  # 拖拽  # 自定义  # 一幅  # 来做  # 图中  # 大家多多  # 判断是否  # 相减  # 只能在  # utf  # px  # width  # padding  # margin  # css  # title  # type  # black 


相关文章: 北京营销型网站制作公司,可以用python做一个营销推广网站吗?  javascript中的try catch异常捕获机制用法分析  购物网站制作公司有哪些,哪个购物网站比较好?  如何确认建站备案号应放置的具体位置?  C#如何使用XPathNavigator高效查询XML  建站之星2.7模板快速切换与批量管理功能操作指南  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  如何通过老薛主机一键快速建站?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  官网建站费用明细查询_企业建站套餐价格及收费标准指南  ,怎么用自己头像做动态表情包?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  *服务器网站为何频现安全漏洞?  建站之星×万网:智能建站系统+自助建站平台一键生成  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  建站之星导航配置指南:自助建站与SEO优化全解析  临沂网站制作企业,临沂第三中学官方网站?  如何在宝塔面板中修改默认建站目录?  山东网站制作公司有哪些,山东大源集团官网?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  太平洋网站制作公司,网络用语太平洋是什么意思?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  大连网站设计制作招聘信息,大连投诉网站有哪些?  如何快速生成专业多端适配建站电话?  XML的“混合内容”是什么 怎么用DTD或XSD定义  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  三星网站视频制作教程下载,三星w23网页如何全屏?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  如何高效生成建站之星成品网站源码?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  如何用5美元大硬盘VPS安全高效搭建个人网站?    如何配置支付宝与微信支付功能?  微课制作网站有哪些,微课网怎么进?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  如何快速搭建FTP站点实现文件共享?  如何访问已购建站主机并解决登录问题?  兔展官网 在线制作,怎样制作微信请帖?  建站之星后台密码遗忘或太弱?如何重置与强化?  如何快速搭建支持数据库操作的智能建站平台?  如何选择最佳自助建站系统?快速指南解析优劣  ,南京靠谱的征婚网站?  股票网站制作软件,网上股票怎么开户?  安徽网站建设与外贸建站服务专业定制方案  如何用腾讯建站主机快速创建免费网站?  如何在宝塔面板创建新站点?  做企业网站制作流程,企业网站制作基本流程有哪些? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。