JavaScript之拖拽功能、封装
来源:互联网 发布:ps cs6 for mac破解版 编辑:程序博客网 时间:2024/05/20 23:33
通过之前一段时间的学习,逐步掌握了JavaScript的一些基本语法,学完之后还得多加练习,根据所学知识,做了一个简易的拖拽功能。
首先先布好html结构,包括样式,这里简单的做了两个拖拽的功能,一个相对于document,一个相对于id = ‘box’,为了消除浏览器自带的文本拖拽功能,添加了一行文字;
演示地址
html代码:
<!doctype html><html><head><meta charset="utf-8"><title>拖拽封装</title><script src="../js/drag.js"></script><style>#div{ overflow:hidden; width:50px; height:50px; background-color:#09F; position:absolute; z-index:5}#img{ display:block; position:absolute}#box{ width:600px; height:600px; position:relative; margin:20px auto; border:1px solid #000;}</style></head><body>全选试试拖拽<div id="div"></div><div id="box"><img src="../Skins/gd07.jpg" id="img" width="100"></div></body></html>效果图:一个相对于document,一个相对于#box
js调用代码:
<script>var div = document.getElementById("div");var img = document.getElementById("img");var box = document.getElementById("box");//调用drag(img,box); //相对于#box拖拽#imgdrag(div,document);//相对于document拖拽#div</script>
ie8及以下版本:
if(obj.setCapture){//设置全局捕获==>取消浏览器默认的文字拖拽(ie8及以下)obj.setCapture();}
标准及ie8以上版本(因为浏览器文本拖拽功能是onmousedown事件触发的,所以只要令该事件的返回值为空即可):
obj.onmousedown = function(){return false;}
防止被拖拽的元素跑到拖拽区域外面去了,所以需要限制拖拽的范围:left范围在 0 ~ 拖拽区的content宽-被拖拽元素的offsetWidth,top范围在 0 ~ 拖拽区的content高-被拖拽元素的offsetHeight;为了达到磁性吸附的功能,在上诉区域内向内减少20个像素作为判断,即当被拖拽元素的left值,top值距离边框少于20px时,被拖拽元素自动贴上去,即left=0, top=0;
代码如下:
if(leftArea < 20){leftArea = 0;}else if(leftArea>w-obj.offsetWidth-20){leftArea = w-obj.offsetWidth;}if(topArea < 20){topArea = 0;}else if(topArea>h-obj.offsetHeight-20){topArea = h -obj.offsetHeight;}
封装的js完整代码:
function drag(obj,box){//第一个参数是被拖拽的元素,第二个参数是拖拽的限制区域;例如上面调用的#box和documentobj.onmousedown = function(ev){var ev = ev || event;var dragl = ev.clientX - this.offsetLeft;var dragt = ev.clientY - this.offsetTop;if(obj.setCapture){//设置全局捕获==>取消浏览器默认的文字拖拽(ie8及以下)obj.setCapture();}document.onmousemove = function(ev){var ev =ev || event;var leftArea = ev.clientX - dragl;var topArea = ev.clientY - dragt;var w=null,h=null;if(box == document){w = document.documentElement.clientWidthh = document.documentElement.clientHeight}else{w = box.scrollWidth;h = box.scrollHeight;}if(leftArea < 20){leftArea = 0;}else if(leftArea>w-obj.offsetWidth-20){leftArea = w-obj.offsetWidth;}if(topArea < 20){topArea = 0;}else if(topArea>h-obj.offsetHeight-20){topArea = h -obj.offsetHeight;}obj.style.left = leftArea + 'px';obj.style.top = topArea + 'px';}document.onmouseup = function(){document.onmousemove =null;document.onmouseup = null;if(obj.releaseCapture){//取消全局捕获obj.releaseCapture();}}return false;//取消浏览器默认的文字拖拽 标准浏览器,ie8以上}}
下载地址
阅读全文
0 0
- JavaScript之拖拽功能、封装
- JavaScript拖拽封装
- JavaScript之封装
- javascript特性之:封装
- javascript 拖拽功能
- javascript之event组件封装
- JavaScript面向对象之-----封装
- Javascript 面向对象之封装
- javascript之全选功能
- IOS-筛选功能之封装重构
- 前端开发之功能封装大全
- 封装实现JavaScript 文件的动态加载功能
- javascript之动画组件emile封装
- JavaScript闭包应用之封装
- JavaScript面向对象编程之封装
- javascript系列之使用Promise封装ajax
- 补基础之javascript面向对象-封装
- javascript基础之九(JavaScript数据封装)
- 华为——进制转换
- 51nod 1468 小Y的IP地址
- 事务使用总结:
- Unix发展史
- Python学习笔记之函数
- JavaScript之拖拽功能、封装
- Android 7.0新签名机制
- NGUI学习笔记(六):结合Toggle的伸缩式滑动列表
- 炮兵阵地 POJ
- 实验五:JPEG解码
- Leetcode183. Customers Who Never Order
- React PropTypes 定义组件的属性类型和默认属性
- call和apply的区别
- 从零开始学_JavaScript_系列(47)——Reflect