作家
登录

javascript实现div的拖动并调整大小类似qq空间个性编辑模块

作者: 来源:www.28hudong.com 2013-03-30 00:18:51 阅读 我要评论

经常上qq空间的朋友一定对qq空间的个性编辑模块印象深刻,可以随意的拖动页面上的元素并且调动大小实现动态布局,当然我每次上csdn博客也会在右下角看见一个新闻窗口,这种效果的确很酷,那么我们也来实现一个吧. 实现步骤: 1.首先是动态创建一个类似这样的html结构: 复制代码 代码如下: <div style="height:200px;width:200px;overflow:hidden" id="a"> <div id="head" style="background-color:blue;height:5%"> <span id="move" style="width:90%;height:100%"></span> <span id="close" style="overflow:hidden;white-space:nowrap;background-color:red">关闭</span> </div> <div id="body" style="width:100%;height:90%"></div> </div> 2.id为body的为你要放置内容的div容器,move是可移动的span,close是关闭这个窗口(准确说是层). 3.然后将事件绑定到这些对象上.具体看一下代码. 复制代码 代码如下: sx.activex.windowex={ init:function(step,t,html){ var a=document.createElement("div"); var head=document.createElement("div"); var move=document.createElement("span"); var close=document.createElement("span"); close.innerText="关闭"; var body=document.createElement("div"); head.appendChild(move); head.appendChild(close); a.appendChild(head); a.appendChild(body); a.style.height="200px"; a.style.width="200px"; a.style.overflow="hidden"; a.style.border="1px red solid"; head.style.backgroundColor="blue"; head.style.height="5%"; move.style.width="90%"; move.style.height="100%"; close.style.height="100%"; close.style.overflow="hidden"; close.style.whiteSpace="nowrap"; close.style.backgroundColor="yellow"; body.style.height="93%"; body.style.width="100%"; body.style.overflow="auto"; a.style.position="absolute"; close.style.position="absolute"; close.style.cursor="hand"; close.style.top=0+"px"; close.style.right=0+"px"; close.onclick=function(){ window.event.cancelBubble=true; var q=a.offsetHeight; var h=window.setInterval(function(){ if(Math.abs(q)>=0){ a.style.height=q+"px"; q=q-step; if(Math.abs(q)<step){ //e.style.height=q+"px"; window.clearInterval(h); //window.setTimeout(function(){ //alert(this==window); close.style.cursor="normal"; a.parentNode.removeChild(a); //a.style.lineHeight="0px"; //},10); } }else{ window.clearInterval(h); //a.style.display="none"; } },t); } move.onmousedown=function(){ this.move=1; this.x=window.event.offsetX; //alert(this.x); this.y=window.event.offsetY; this.setCapture(); } move.onmousemove=function(){ this.style.cursor="move"; if(window.event.clientX<=0 || window.event.clientY<=0 || window.event.clientX>=document.body.clientWidth || window.event.clientY>=document.body.clientHeight){return false;} if(this.move==1){ this.parentNode.parentNode.style.left=window.event.clientX-this.x+"px"; this.parentNode.parentNode.style.top=window.event.clientY-this.y+"px"; this.setCapture(); } } move.onmouseup=function(){ if(this.move==1){ this.move=0; //this.style.cursor="normal"; this.releaseCapture(); } } a.onmousemove=function(){ if(this.move==1){ if(window.event.clientX-this.offsetLeft<2 || window.event.clientY-this.offsetTop<2) return false; this.style.width=window.event.clientX-this.offsetLeft+"px"; this.style.height=window.event.clientY-this.offsetTop+"px"; close.style.right="0px"; this.setCapture(); } else{ if(window.event.offsetX-this.offsetWidth>-6 && window.event.offsetY-this.offsetHeight>-6) this.style.cursor="nw-resize"; else this.style.cursor="default"; } } a.onmouseup=function(){ if(this.move==1){ this.move=0; this.releaseCapture(); } } a.onmousedown=function(){ if(this.style.cursor=="nw-resize"){ this.move=1; this.setCapture(); } } body.innerHTML=html; return a; } 代码也不复杂,主要是什么onmousedown,onmousemove,onmouseup的编写.我调整大小的原理当的你鼠标移动到层的右下角时,鼠标指针改变,这时按下鼠标并且移动时,会将当前层setcapture,移动鼠标层会随鼠标的位置而调整大小,松开鼠标releasecapture. 函数的参数step是你按下关闭时每次时间间隔移动的步数,t是时间间隔,html是你要插入到body层里的html代码. 一下给出一个调用例子: 复制代码 代码如下: <html> <head> <title>Untitled Document</title> </head> <body> <mce:script src="kongjian.js" mce_src="kongjian.js"></mce:script> <mce:script type="text/javascript"><!-- var a=sx.activex.windowex.init(10,10,"<img src="1.jpg" mce_src="1.jpg" height=500 width=500>"); //a.contentEditable=true; a.style.bottom="0px"; a.style.right="0px"; document.body.appendChild(a); // --></mce:script> </body> </html> 代码有bug的地方还请大家多多包涵.

  推荐阅读

  什么是json和jsonp,jQuery json实例详详细说明

什么是JSON? 前面简单说了一下,JSON是一种基于文本的数据交换方式,或者叫做数据描述格式,你是否该选用他首先肯定要关注它所拥有的优点。 JSON的优点: 1、基于纯文本,跨平台传递极其简单; 2、Javascript原生>>>详细阅读


本文标题:javascript实现div的拖动并调整大小类似qq空间个性编辑模块

地址:http://www.17bianji.com/kaifa2/JS/22848.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)