热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

js拖拽添加htmldom,JavaScript实现DIV层拖动及动态增加新层的方法

本文实例讲述了JavaScript实现DIV层拖动及动态增加新层的方法。分享给大家供大家参考。具体分析如下:无刷新添加一个新的DIV层,并可实现的该层的

本文实例讲述了Javascript实现DIV层拖动及动态增加新层的方法。分享给大家供大家参考。具体分析如下:

无刷新添加一个新的DIV层,并可实现的该层的拖动,鼠标拖动层可移动位置,将JS部分另存为一个新文件,用到的时候从外部引入,这个拖动层代码很流行,GG和YAHOO等大网站经常可以看到这种效果。

DIV层拖动,动态增加新层的Javascript

body {margin:0px;padding:0px;font-size:12px;text-align:center;}

body > div {text-align:center; margin-right:auto; margin-left:auto;}

.content{width:900px;}

.content .left{

float:left;

width:20%;

border:1px solid #0066CC;

margin:3px;

}

.content .center{

float:left;

border:1px solid #FF0000;

margin:3px;

width:57%

}

.content .right{

float:right;

width:20%;

border:1px solid #FF0000;

margin:3px

}

.mo{

height:auto;

border:1px solid #CCC;

margin:3px;

background:#FFF

}

.mo h1{

background:#ECF9FF;

height:18px;

padding:3px;

cursor:move

}

.closediv{

cursor:default;

}

.minusspan{

cursor:default;

}

.mo .nr{

height:80px;

border:1px solid #F3F3F3;

margin:2px

}

h1{

margin:0px;

padding:0px;

text-align:left;

font-size:12px

}

.dragging {

FILTER: progid:DXImageTransform.Microsoft.Alpha(opacity=60);

opacity: 0.6;

moz-opacity: 0.6

}

var dragobj={}

window.οnerrοr=function(){return false}

var domid=12

function on_ini(){

String.prototype.inc=function(s){return this.indexOf(s)>-1?true:false}

var agent=navigator.userAgent

window.isOpr=agent.inc("Opera")

window.isIE=agent.inc("IE") && !isOpr

window.isMoz=agent.inc("Mozilla") && !isOpr && !isIE

if(isMoz){

Event.prototype.__defineGetter__("x",function(){return this.clientX+2})

Event.prototype.__defineGetter__("y",function(){return this.clientY+2})

}

basic_ini()

}

function basic_ini(){

window.$=function(obj){return typeof(obj)=="string"?document.getElementById(obj):obj}

window.oDel=function(obj){if($(obj)!=null){$(obj).parentNode.removeChild($(obj))}}

}

window.oDel=function(obj){if($(obj)!=null){$(obj).parentNode.removeChild($(obj))}}

window.οnlοad=function(){

on_ini()

var o=document.getElementsByTagName("h1")

for(var i=0;i

o[i].οnmοusedοwn=addevent;

//添加折叠和关闭按钮

var tt = document.createElement("div");

tt.style.cssText = "float:left";

var span = document.createElement("span");

span.innerHTML = "--"+o[i].innerHTML;

span.style.cssText = "cursor:default;";

span.onmousedown = minusDiv;

tt.appendChild(span);

var close = document.createElement("div");

close.innerHTML = "X";

close.style.cssText = "cursor:default;float:right";

close.onmousedown = closeDiv;

o[i].innerHTML = "";

o[i].appendChild(tt);

o[i].appendChild(close);

}

}

//折叠或者显示层

function minusDiv(e)

{

e=e||event

var nr = this.parentNode.parentNode.nextSibling; //取得内容层

nr.style.display = nr.style.display==""?"none":"";

}

//移出层

function closeDiv(e)

{

e=e||event

var mdiv = this.parentNode.parentNode; //取得目标层

oDel(mdiv);

}

function addevent(e){

if(dragobj.o!=null)

return false

e=e||event

dragobj.o=this.parentNode

dragobj.xy=getxy(dragobj.o)

dragobj.xx=new Array((e.x-dragobj.xy[1]),(e.y-dragobj.xy[0]))

//dragobj.o.className = 'dragging';

dragobj.o.style.width=dragobj.xy[2]+"px"

dragobj.o.style.height=dragobj.xy[3]+"px"

dragobj.o.style.left=(e.x-dragobj.xx[0])+"px"

dragobj.o.style.top=(e.y-dragobj.xx[1])+"px"

dragobj.o.style.position="absolute"

dragobj.o.style.filter='alpha(opacity=60)'; //添加拖动透明效果

var om=document.createElement("div")

dragobj.otemp=om

om.style.width=dragobj.xy[2]+"px"

om.style.height=dragobj.xy[3]+"px"

om.style.border = "1px dashed red"; //ikaiser添加,实现虚线框

dragobj.o.parentNode.insertBefore(om,dragobj.o)

return false

}

document.onselectstart=function(){return false}

window.οnfοcus=function(){document.onmouseup()}

window.οnblur=function(){document.onmouseup()}

document.οnmοuseup=function(){

if(dragobj.o!=null){

dragobj.o.style.width="auto"

dragobj.o.style.height="auto"

dragobj.otemp.parentNode.insertBefore(dragobj.o,dragobj.otemp)

dragobj.o.style.position=""

oDel(dragobj.otemp)

dragobj={}

}

}

document.οnmοusemοve=function(e){

e=e||event

if(dragobj.o!=null){

dragobj.o.style.left=(e.x-dragobj.xx[0])+"px"

dragobj.o.style.top=(e.y-dragobj.xx[1])+"px"

createtmpl(e, dragobj.o) //传递当前拖动对象

}

}

function getxy(e){

var a=new Array()

var t=e.offsetTop;

var l=e.offsetLeft;

var w=e.offsetWidth;

var h=e.offsetHeight;

while(e=e.offsetParent){

t+=e.offsetTop;

l+=e.offsetLeft;

}

a[0]=t;a[1]=l;a[2]=w;a[3]=h

return a;

}

function inner(o,e){

var a=getxy(o)

if(e.x>a[1] && e.xa[0] && e.y

if(e.y

return 1;

else

return 2;

}else

return 0;

}

//将当前拖动层在拖动时可变化大小,预览效果

function createtmpl(e, elm){

for(var i=0;i

if(document.getElementById("m"+i) == null) //已经移出的层不再遍历

continue;

if($("m"+i)==dragobj.o)

continue

var b=inner($("m"+i),e)

if(b==0)

continue

dragobj.otemp.style.width=$("m"+i).offsetWidth

elm.style.width = $("m"+i).offsetWidth;

//1为下移,2为上移

if(b==1){

$("m"+i).parentNode.insertBefore(dragobj.otemp,$("m"+i))

}else{

if($("m"+i).nextSibling==null){

$("m"+i).parentNode.appendChild(dragobj.otemp)

}else{

$("m"+i).parentNode.insertBefore(dragobj.otemp,$("m"+i).nextSibling)

}

}

return

}

for(var j&#61;0;j<3;j&#43;&#43;){

if($("dom"&#43;j).innerHTML.inc("div")||$("dom"&#43;j).innerHTML.inc("DIV"))

continue

var op&#61;getxy($("dom"&#43;j))

if(e.x>(op[1]&#43;10) && e.x

$("dom"&#43;j).appendChild(dragobj.otemp)

dragobj.otemp.style.width&#61;(op[2]-10)&#43;"px"

}

}

}

function add_div()

{

var o&#61;document.createElement("div")

o.className&#61;"mo"

o.id&#61;"m"&#43;domid

$(&#39;dom0&#39;).appendChild(o)

o.innerHTML&#61;"

dom"&#43;domid&#43;"

o.getElementsByTagName("h1")[0].οnmοusedοwn&#61;addevent

domid&#43;&#43;

}

dom0
dom1
dom2
dom3
dom4
dom5
dom8
dom9

希望本文所述对大家的Javascript程序设计有所帮助。



推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 移动端常用单位——rem的使用方法和注意事项
    本文介绍了移动端常用的单位rem的使用方法和注意事项,包括px、%、em、vw、vh等其他常用单位的比较。同时还介绍了如何通过JS获取视口宽度并动态调整rem的值,以适应不同设备的屏幕大小。此外,还提到了rem目前在移动端的主流地位。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
author-avatar
哈喽随风amy
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有