快捷导航
蚂蚁部落 网站首页 实例代码 canvas实例 查看内容

js能够限定范围拖动效果代码实例

2017-4-12 17:05| 发布者: admin| 查看: 402| 评论: 0|来自: 蚂蚁部落

本章节分享一段拖动代码实例,它能够将拖动的范围限定为当前浏览器客户区。

代码实例如下:

[HTML] 纯文本查看 复制代码运行代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style type="text/css">
* {
  margin: 0;
  padding: 0;
}
#box {
  position: absolute;
  left: 0;
  top: 0;
  width: 100px;
  height: 100px;
  background: #f60;
}
</style>
<script type="text/javascript">
window.onload = function () {
  var oBox = document.getElementById('box');
  oBox.onmousedown = function (e) {
    var oEvent = e || window.event,
      disL = oEvent.clientX - oBox.offsetLeft,
      disT = oEvent.clientY - oBox.offsetTop,
      maxL = document.documentElement.clientWidth - oBox.offsetWidth,
      maxT = document.documentElement.clientHeight - oBox.offsetHeight;
 
    document.onmousemove = function (e) {
      var oEvent = e || window.event,
        disX = oEvent.clientX - disL,
        disY = oEvent.clientY - disT;
 
      //console.log(disX);
      if (disX <= 0) { disX = 0 }
      if (disY <= 0) { disY = 0 }
      if (disX >= maxL) { disX = maxL }
      if (disY >= maxT) { disY = maxT }
      oBox.style.left = disX + 'px';
      oBox.style.top = disY + 'px';
    }
 
  }
  document.onmouseup = function () {
    document.onmousemove = null;
  }
}
</script>
</head>
<body>
<div id="box"></div>
</body>
</html>

上面的代码实现了我们的要求,下面就介绍一下它的实现过程。

一.代码注释:

(1).window.onload = function () {},当文档内容完全加载完毕再去执行函数中的代码。

(2).var oBox = document.getElementById('box'),获取id属性值为box的元素对象。

(3).oBox.onmousedown = function (e) {},为元素注册onmousedown注册事件处理函数。

(4).var oEvent = e || window.event,实现事件对象的兼容效果。

(5).disL = oEvent.clientX - oBox.offsetLeft,鼠标在客户区的坐标减去OBox距离body左侧的距离,其实也就是获取鼠标距离OBox元素左侧的距离。(6).maxL = document.documentElement.clientWidth - oBox.offsetWidth,获取OBox元素的最大left值。

(7).document.onmousemove = function (e) {},注册onmousemove事件处理函数,之所以注册document上,是利用了事件冒泡效果,同时也防止了鼠标移出OBox元素,导致拖动失效现象。

(8).disX = oEvent.clientX - disL,获取OBox元素的left值。

(9).disY = oEvent.clientY - disT,获取OBox元素的top值。

(10).if (disX <= 0) { disX = 0 }

  if (disY <= 0) { disY = 0 }

  if (disX >= maxL) { disX = maxL }

  if (disY >= maxT) { disY = maxT }

上面的代码实现了拖动范围限定效果。

(11).document.onmouseup = function () {

document.onmousemove = null;

},当松开鼠标按键的时候,解绑onmousemove事件处理函数。

二.相关阅读:

(1).var oEvent = e || window.event可以参阅var ev=window.event||ev的作用是什么一章节。

(2).clientX可以参阅javascript event.clientX一章节。

(3).offsetLeft可以参阅offsetleft一章节。

(4).offsetWidth可以参阅js offsetWidth一章节。

(5).onmousemove事件可以参阅javascript mousemove事件一章节。


鲜花

握手

雷人

路过

鸡蛋

最新评论

关于我们|手机版|小黑屋| 蚂蚁部落 ( 鲁ICP备10022556号-3 )

GMT+8, 2017-6-27 16:50 , Processed in 0.060448 second(s), 21 queries .

Powered by Discuz! X3.2 Licensed

Copyright © 2012-2017 Design: 蚂蚁部落

返回顶部