JS----拖拽图层,面向过程,面向对象
来源:互联网 发布:淘宝客服是怎么做的 编辑:程序博客网 时间:2024/06/06 07:51
拖拽可以是图层也可以是图片
面向过程--升级到->面向对象
1. 直接调用:Drag插件,
2. 对Drag的插件进行扩展:LimitDrag插件,
<!doctype html><html><head><meta charset="utf-8"><title>拖拽效果由过程向OOP转</title><style>*{ margin:0; padding:0;}#div1{ width:100px; height:100px; background:#888; position:absolute;}#div2{ width:80px; height:80px; background:#66C; position:absolute;}</style></head><body><!--V0.1 面向过程的写法--><script>window.onload = function(){var oDiv = document.getElementById('div1');oDiv.onmousedown = function(ev){var oEvent = ev || event;//兼容代码var disX = oEvent.clientX - oDiv.offsetLeft;//offsetLeft: 为元素离左侧的距离var disY = oEvent.clientY - oDiv.offsetTop;document.onmousemove = function(ev){var oEvent = ev || event;oDiv.style.left = oEvent.clientX-disX+'px';//是原来的基础上增加或减少oDiv.style.top = oEvent.clientY-disY+'px';}document.onmouseup = function(){document.onmousemove = null;document.onmouseup = null;}}}</script>
<!--V1.0 过渡OOP, 就是把所有方法抽取出来,单独存在--><script>var oDiv = null;var disX = 0;var disY = 0;window.onload = function(){oDiv = document.getElementById('div1');oDiv.onmousedown = fnDown;}function fnDown(ev){var oEvent = ev || event;//兼容代码disX = oEvent.clientX - oDiv.offsetLeft;//offsetLeft: 为元素离左侧的距离disY = oEvent.clientY - oDiv.offsetTop;document.onmousemove = fnMove;document.onmouseup = fnUp;}function fnMove(ev){var oEvent = ev || event;oDiv.style.left = oEvent.clientX-disX+'px';//是原来的基础上增加或减少oDiv.style.top = oEvent.clientY-disY+'px';}function fnUp(){document.onmousemove = null;document.onmouseup = null;}</script>
<!--V2.0 纯OOP--><script>function Drag(id){var _this=this;this.disX=0;this.dixY=0;this.oDiv = document.getElementById(id);this.oDiv.onmousedown = function(ev){_this.fnDown(ev);return false;}}Drag.prototype.fnDown = function(ev){var _this = this;var oEvent = ev || event;this.disX = oEvent.clientX - this.oDiv.offsetLeft;this.disY = oEvent.clientY - this.oDiv.offsetTop;document.onmousemove = function(ev){_this.fnMove(ev);}document.onmouseup = function(){_this.fnUp()}}Drag.prototype.fnMove = function(ev){var oEvent = ev || event;this.oDiv.style.left = oEvent.clientX-this.disX+'px';this.oDiv.style.top = oEvent.clientY-this.disY+'px';}Drag.prototype.fnUp = function(){document.onmousemove = null;document.onmouseup = null;}</script><script>window.onload = function(){new Drag('div1');}</script>
<!--扩展,继承 限制左右范围--><script>function LimitDrag(id){Drag.call(this, id);//继承属性}for(var i in Drag.prototype){LimitDrag.prototype[i] = Drag.prototype[i];//获取所有的方法}LimitDrag.prototype.fnMove = function(ev){var oEvent = ev || event;var l = oEvent.clientX-this.disX;var t = oEvent.clientY-this.disY;if(l<0)//对左右范围限制l=0;else if(l>document.documentElement.clientWidth-this.oDiv.offsetWidth)l = document.documentElement.clientWidth-this.oDiv.offsetWidth;if(t<0)//对上下范围限制t=0;else if(t>document.documentElement.clientHeight-this.oDiv.offsetHeight)t = document.documentElement.clientHeight-this.oDiv.offsetHeight;this.oDiv.style.left = l+'px';this.oDiv.style.top = t+'px';}</script><script>window.onload = function(){new LimitDrag('div2');}</script>
<div id="div1">div1-Drag</div><div id="div2">div2-LimitDrag</div></body></html>
0 0
- JS----拖拽图层,面向过程,面向对象
- 面向过程 & 面向对象
- 面向对象&面向过程
- 面向过程---面向对象
- 面向对象&&面向过程
- 面向对象/面向过程
- js面向对象---无缝轮播图(附面向过程代码)
- 面向过程与面向对象
- 面向对象与面向过程
- 面向过程到面向对象
- 面向对象与面向过程
- 面向对象 与 面向过程
- 面向对象与面向过程
- 面向对象与面向过程
- 面向对象与面向过程
- ”面向过程“到”面向对象“
- 面向对象与面向过程
- 面向过程与面向对象
- iOS运行时场合一 category中添加(连接)对象(fake机制)
- 使用open方式的文件锁
- javascript canvas 碰撞检测
- cvFitLine直线拟合函数的应用
- Android百分比布局使用小坑一个
- JS----拖拽图层,面向过程,面向对象
- Snail—iOS开发学习博客及网站
- 百度地图的封装
- git入门
- Running Maven Defaults and Overriding with TestNG
- C++实现Windows下的Daemon,监控多个进程
- 装修的注意事项
- TraceView工具的使用说明
- c++ 中 `++i` 与 `i++` 在运算表达式中的优先级