用javascript做拖动布局的思路

论坛 期权论坛     
niminba   2021-5-23 05:29   169   0
好了,转入正文,在开始之前先介绍几个功能函数! <br>1.格式化事件的函数 <br><div class="codetitle"><span><a class="copybut" data="55295" id="copybut55295"><u>复制代码</u></a></span> 代码如下:</div><div class="codebody" id="code55295"><br>function&nbsp;getEvent(){&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//同时兼容ie和ff的写法&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(document.all)&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;window.event;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;func=getEvent.caller;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(func!=null){&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;arg0=func.arguments[0];&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(arg0){&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((arg0.constructor==Event&nbsp;||&nbsp;arg0.constructor&nbsp;==MouseEvent)&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;(typeof(arg0)=="object"&nbsp;&amp;&amp;&nbsp;arg0.preventDefault&nbsp;&amp;&amp;&nbsp;arg0.stopPropagation)){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;arg0;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;func=func.caller;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;&nbsp; <br>}&nbsp;<br></div><br><br><strong>2.取得鼠标的位置</strong> <br><br><div class="codetitle"><span><a class="copybut" data="47010" id="copybut47010"><u>复制代码</u></a></span> 代码如下:</div><div class="codebody" id="code47010"><br><br>function&nbsp;mouseCoords(ev){&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;if(ev.pageX&nbsp;||&nbsp;ev.pageY){&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;{x:ev.pageX,&nbsp;y:ev.pageY};&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;{&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x:ev.clientX&nbsp;+&nbsp;document.body.scrollLeft&nbsp;-&nbsp;document.body.clientLeft,&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y:ev.clientY&nbsp;+&nbsp;document.body.scrollTop&nbsp;-&nbsp;document.body.clientTop&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp; <br>}&nbsp;<br></div><br><br><strong>3.得到元素的位置&nbsp;<br></strong><br>&nbsp;<div class="codetitle"><span><a class="copybut" data="24983" id="copybut24983"><u>复制代码</u></a></span> 代码如下:</div><div class="codebody" id="code24983"><br>function&nbsp;getPosition(ele){&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;left&nbsp;=&nbsp;0;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;top&nbsp;=&nbsp;0;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(ele.offsetParent){&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;left&nbsp;+=&nbsp;ele.offsetLeft;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top&nbsp;+=&nbsp;ele.offsetTop;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ele&nbsp;=&nbsp;ele.offsetParent;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;left&nbsp;+=&nbsp;ele.offsetLeft;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;top&nbsp;+=&nbsp;ele.offsetTop;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;{x:left,&nbsp;y:top};&nbsp; <br>}&nbsp;<br></div><br>首先,当然是写好初始布局的页面,&nbsp;&nbsp;查看初始页面效果 <br><br>一般拖动的元素是跟随鼠标的,我的思路是在把拖动的元素增加到一个position为absolute的div中, <br>鼠标拖动的时候就让它的位置根据鼠标的坐标变化就可以了。所以在页面增加了个onload <br><br><div class="codetitle"><span><a class="copybut" data="64504" id="copybut64504"><u>复制代码</u></a></span> 代码如下:</div><div class="codebody" id="code64504"><br>var&nbsp;tmpDiv=null;//临时存放拖动对象的div&nbsp; <br>window.onload=function(){&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;tmpDiv=document.createElement("div");&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;tmpDiv.style.cssText&nbsp;=&nbsp;'position:absolute;display:none;border:1px&nbsp;dotted&nbsp;#FFCC66;';&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;document.body.appendChild(tmpDiv);&nbsp; <br>}&nbsp;<br></div><br><br>要实现拖动,首先触发的事件是mouseDown,所以我在拖动的table的一个td上绑定了onmousedown="mouseDown(this);" <br><br>&nbsp;程序代码 <br><br><div class="codetitle"><span><a class="copybut" data="45941" id="copybut45941"><u>复制代码</u></a></span> 代码如下:</div><div class="codebody" id="code45941"><br>var&nbsp;dragObject&nbsp;=&nbsp;null;//拖动的元素(table)&nbsp; <br>var&nbsp;mouseOffset&nbsp;=&nbsp;null;//鼠标的在拖动元素中的位置&nbsp; <br>var&nbsp;dragDiv=null;//拖动的table所在的列的div&nbsp; <br>var&nbsp;eleDivW=null;//拖动的table的父节点(div)的高度&nbsp; <br>var&nbsp;dragDivLen=null;//拖动的table所在的列的div中用来放置table的div的个数&nbsp; <br>var&nbsp;DragContainer=["col1","col2","col3"];//用来实现列布局的div的id&nbsp; <br>//鼠标按下拖动的元素&nbsp; <br>function&nbsp;mouseDown(elem){&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;ev=getEvent();&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;dragObject&nbsp;=&nbsp;elem.p
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP