- 浏览: 141044 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
nishwd123:
受益匪浅,多谢楼主细心讲解.
Hibernate、Spring和Struts工作原理及使用理由 -
doublelcf:
写得真好。全面,流畅。清晰
Hibernate、Spring和Struts工作原理及使用理由
如果你想实现Web上的组件能用鼠标随意拖动到页面的任意位置或指定的位置等,那你就要看看dom-drag.js了。dom-drag.js可以从http://youngpup.net/projects/dom-drag/下载到,作者 Aaron Boodman。
其作者称其为面向现代DHTML浏览器的轻量级、 易于使用的拖放API。事实上DOM-Drag库是做到了。
你想让某个组件能够拖动,你可以调用 Drag.init( ) 方法。
init : function(o, oRoot, minX, maxX, minY, maxY, bSwapHorzRef, bSwapVertRef, fXMapper, fYMapper)
o :是想现实鼠标拖动的组件;
oRoot : 是o上层的组件,将随o一起拖动;
minX, maxX, minY, maxY :设置鼠标拖动的范围,由下面的例子cropper可以看出,如果有oRoot,那范围是由oRoot相对于页面来说的;
bSwapHorzRef, bSwapVertRef :设置组件的优先权;
fXMapper, fYMapper: 设置拖动的路径
作者给了6个简单例子说明Drag.init()的使用,每个例子都是简单易懂的。
例子1:http://youngpup.net/projects/dom-drag/ex1.html
这个例子实现了一张图片在页面中用鼠标随意的拖动
源代码
<script language="javascript">
Drag.init(document.getElementById("foo"));
</script>
上面这段代码使id为foo的图片实现了能鼠标拖动的功能,Drag.init(o,其他参数),如果使用Drag.init(o)其他参数将使用默认值,null或true,但注意不能Drag.init(o,minX),中间的参数是不能漏掉的。
style="position:absolute; left:20px; top:20px;"
注意: 组件的位置必需设置为absolute或relative 和 初始化开始的位置,就像上面的代码一样,Drag.init()方法必需是在组件被读取了之后才能调用。
例子2:http://youngpup.net/projects/dom-drag/ex2.html
这个例子实现了通过子组件实现子父组件的拖动
源代码
<script language="javascript">
var theHandle = document.getElementById("handle");
var theRoot = document.getElementById("root");
Drag.init(theHandle, theRoot);
</script>
通过对子组件"handle"的拖动,实现对 父组件"root"的拖动,注意是子组件"handle"放在前面
例子3: http://youngpup.net/projects/dom-drag/ex3.html
这个例子实现了对组件拖动范围的限制
源代码
<script language="javascript">
var aThumb = document.getElementById("thumb");
Drag.init(aThumb, null, 25, 25, 25, 200);
</script>
这里的minX, maxX, minY, maxY分别为25,25,25,200。X都是25,Y是从25到200,那就是说组件只能在Y轴上25到200的范围移动了。如果这4个属性设置为null,那就是说为null的属性是没有限制的了,如果4个都为null就是表示组件在页面上的拖动是没有限制的。
例子4:http://youngpup.net/projects/dom-drag/ex4.html
这个例子是前面3个例子的结合,这也是个实用的例子,这个例子用到了ypSimpleScrollC.js。
源代码
''scroll" 我怎么找不到id为scroll的组件,不用急,看看ypSimpleScrollC.js,原来这个是设置
id="scrollContainer"
id="scrollContent"
的样式啊,在命名上id + Container , id + Content,id可以改其他的,但后面的是固定的。
然后调用theScroll.load()方法
// the number of pixels the thumb can travel vertically (max - min)
thumbTravel = theThumb.maxY - theThumb.minY;
thumbTravel 是 theThumb在X轴能活动的像素。
// the ratio between scroller movement and thumbMovement
ratio = theScroll.scrollH / thumbTravel;
ratio是正文的高度 跟 垂直滚动条的滚动范围 的比例
theThumb.onDrag = function(x, y) {
theScroll.jumpTo(null, Math.round((y - theThumb.minY) * ratio));
}
调用theThumb的onDrag事件,是正文 跟 滚动条以相同的比例滚动,实现同步
例子5:http://youngpup.net/projects/dom-drag/ex5.html
这个例子有3个在页面中可以任意拖动的图片A、B、C,但如果三位老兄的位置重叠了呢,谁在上?谁在下?打架解决吗?肯定不行啦,大家都是文明人嘛!作者提供了一种能解决少数组件重叠的,谁主谁次的方法。
源代码:
这个 g 是在最上层的, p 是在中间层的 , b 是在最下层的。
Drag.init(document.getElementById("p"), null, null, null, null, null, false, true);
Drag.init(.....,false,true);后面两个参数决定了组件在重叠时的地位。
最高的当然是true,true啦,最低的是false,false。理论上是有4种组合的
true,true->true,false->false,ture->false,false 。
如果你有太多要拖动的组件啦,那没办法啦,你自己可以试试改写js中的代码,让其能支持更多,9或16或更多。
例子6: http://youngpup.net/projects/dom-drag/ex6.html
这个例子中,图片的拖动是随着一定的路径,不是原先的可以随意拖动了
源代码:
Drag.init(document.getElementById("p"), null, null, null, null, null, false, false, null, mySin);
看到最后2个参数了吗?倒数第二个是设置x轴上的路径的,最后一个是设置y轴上的路径的。倒数第二个参数设置为null表示在x轴上的路径是随意的,y轴则是沿着正弦路径。
例子cropper:http://youngpup.net/projects/dom-drag/cropper.html
这个例子是在一张图片上实现部分清晰显示效果。
源代码:
这里面有3张图片,一张是像素是300*300的snare_pic_large-300.jpg,一张是像素为600*600中间有个100*100空洞的selection.gif(这个我搞了半天才知道原来是中间破个洞- -#!!),最后一张是张空白图片的x.gif,其实就是利用把空图片放在selection.gif的空洞的位置,然后同过空图片带动selection.gif。
<div style="width:300px; height:300px; overflow:hidden; top:20px; left:20px;">
<img src="snare_pic_large-300.jpg" />
这个<div>是父div,里面设置了宽度跟高度方便为300px,overflow : hidden 的作用是如果放进来的比如图片的像素超过300*300,超过部分将被隐藏,这个div放在top 20,left 20的地方。
下面插入图片snare_pic_large-300.jpg。
id为thang的<div>是上面的<div>的子div,注意设置thang的top,left的位置是相对于 父<div> 的,为了把空洞放在父<div>的左上角,thang的left -250,top -250,图片selection.gif放在0,0位置,这是相对于thang的,x.gif设置成跟空洞愿意的宽度跟高度,放在250,250位置,这也是相对于thang的。
//页面加载是初始化组件
其作者称其为面向现代DHTML浏览器的轻量级、 易于使用的拖放API。事实上DOM-Drag库是做到了。
你想让某个组件能够拖动,你可以调用 Drag.init( ) 方法。
init : function(o, oRoot, minX, maxX, minY, maxY, bSwapHorzRef, bSwapVertRef, fXMapper, fYMapper)
o :是想现实鼠标拖动的组件;
oRoot : 是o上层的组件,将随o一起拖动;
minX, maxX, minY, maxY :设置鼠标拖动的范围,由下面的例子cropper可以看出,如果有oRoot,那范围是由oRoot相对于页面来说的;
bSwapHorzRef, bSwapVertRef :设置组件的优先权;
fXMapper, fYMapper: 设置拖动的路径
作者给了6个简单例子说明Drag.init()的使用,每个例子都是简单易懂的。
例子1:http://youngpup.net/projects/dom-drag/ex1.html
这个例子实现了一张图片在页面中用鼠标随意的拖动
源代码
<script language="javascript" src="dom-drag.js"></script> <img id="foo" src="p.gif" style="position:absolute; left:20px; top:20px;" /> <script language="javascript"> Drag.init(document.getElementById("foo")); </script>
<script language="javascript">
Drag.init(document.getElementById("foo"));
</script>
上面这段代码使id为foo的图片实现了能鼠标拖动的功能,Drag.init(o,其他参数),如果使用Drag.init(o)其他参数将使用默认值,null或true,但注意不能Drag.init(o,minX),中间的参数是不能漏掉的。
style="position:absolute; left:20px; top:20px;"
注意: 组件的位置必需设置为absolute或relative 和 初始化开始的位置,就像上面的代码一样,Drag.init()方法必需是在组件被读取了之后才能调用。
例子2:http://youngpup.net/projects/dom-drag/ex2.html
这个例子实现了通过子组件实现子父组件的拖动
源代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> <html> <head> <script language="javascript" src="dom-drag.js"></script> <style type="text/css"> #root { position:absolute; height:100px; width:150px; background-color:#F4F4F4; border:1px solid #333; } #handle { margin:2px; padding:2px; width:142px; color:white; background-color:navy; font-family:verdana, sans-serif; font-size:10px; } </style> </head> <body> <div id="root" style="left:20px; top:20px;"> <div id="handle">Handle</div> </div> <script language="javascript"> var theHandle = document.getElementById("handle"); var theRoot = document.getElementById("root"); Drag.init(theHandle, theRoot); </script> </body> </html>
<script language="javascript">
var theHandle = document.getElementById("handle");
var theRoot = document.getElementById("root");
Drag.init(theHandle, theRoot);
</script>
通过对子组件"handle"的拖动,实现对 父组件"root"的拖动,注意是子组件"handle"放在前面
例子3: http://youngpup.net/projects/dom-drag/ex3.html
这个例子实现了对组件拖动范围的限制
源代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> <html> <head> <script language="javascript" src="dom-drag.js"></script> <style type="text/css"> #thumb { position:absolute; height:50px; width:12px; background-color:#eee; border:1px outset #eee; } </style> </head> <body> <div id="thumb" style="left:25px; top:25px;"></div> <script language="javascript"> var aThumb = document.getElementById("thumb"); Drag.init(aThumb, null, 25, 25, 25, 200); </script> </body> </html>
<script language="javascript">
var aThumb = document.getElementById("thumb");
Drag.init(aThumb, null, 25, 25, 25, 200);
</script>
这里的minX, maxX, minY, maxY分别为25,25,25,200。X都是25,Y是从25到200,那就是说组件只能在Y轴上25到200的范围移动了。如果这4个属性设置为null,那就是说为null的属性是没有限制的了,如果4个都为null就是表示组件在页面上的拖动是没有限制的。
例子4:http://youngpup.net/projects/dom-drag/ex4.html
这个例子是前面3个例子的结合,这也是个实用的例子,这个例子用到了ypSimpleScrollC.js。
源代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> <html> <head> <script language="javascript" src="dom-drag.js"></script> <script language="javascript" src="ypSimpleScrollC.js"></script> <style type="text/css"> #root { position:absolute; height:100px; width:150px; background-color:#F4F4F4; border:1px solid #333; font-family:verdana, sans-serif; font-size:10px; } #handle { margin:2px; padding:2px; width:142px; color:white; background-color:navy; cursor:default; } #thumb { position:absolute; height:25px; width:11px; background-color:#eee; border:1px outset #eee; } p { margin-top:0px; margin-bottom:1em; } </style> <script language="javascript"> var theHandle, theRoot, theThumb, theScroll; var thumbTravel, ratio; theScroll = new ypSimpleScroll("scroll", 2, 19, 128, 75); window.onload = function() { theHandle = document.getElementById("handle"); theRoot = document.getElementById("root"); theThumb = document.getElementById("thumb"); theScroll.load(); Drag.init(theHandle, theRoot); Drag.init(theThumb, null, 135, 135, 19, 71); // the number of pixels the thumb can travel vertically (max - min) thumbTravel = theThumb.maxY - theThumb.minY; // the ratio between scroller movement and thumbMovement ratio = theScroll.scrollH / thumbTravel; theThumb.onDrag = function(x, y) { theScroll.jumpTo(null, Math.round((y - theThumb.minY) * ratio)); } } </script> </head> <body> <div id="root" style="left:20px; top:20px;"> <div id="handle">Handle</div> <div id="thumb" style="left:135px; top:19px;"></div> <div id="scrollContainer"> <div id="scrollContent"> <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exercitation ulliam corper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem veleum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel willum lunombro dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. </p> </div> </div> </div> </body> </html>
''scroll" 我怎么找不到id为scroll的组件,不用急,看看ypSimpleScrollC.js,原来这个是设置
id="scrollContainer"
id="scrollContent"
的样式啊,在命名上id + Container , id + Content,id可以改其他的,但后面的是固定的。
然后调用theScroll.load()方法
// the number of pixels the thumb can travel vertically (max - min)
thumbTravel = theThumb.maxY - theThumb.minY;
thumbTravel 是 theThumb在X轴能活动的像素。
// the ratio between scroller movement and thumbMovement
ratio = theScroll.scrollH / thumbTravel;
ratio是正文的高度 跟 垂直滚动条的滚动范围 的比例
theThumb.onDrag = function(x, y) {
theScroll.jumpTo(null, Math.round((y - theThumb.minY) * ratio));
}
调用theThumb的onDrag事件,是正文 跟 滚动条以相同的比例滚动,实现同步
例子5:http://youngpup.net/projects/dom-drag/ex5.html
这个例子有3个在页面中可以任意拖动的图片A、B、C,但如果三位老兄的位置重叠了呢,谁在上?谁在下?打架解决吗?肯定不行啦,大家都是文明人嘛!作者提供了一种能解决少数组件重叠的,谁主谁次的方法。
源代码:
<script language="javascript" src="dom-drag.js"></script> <img id="p" src="p.gif" style="position:absolute; left:50px; bottom:20px;" /> <img id="g" src="g.gif" style="position:absolute; right:20px; bottom:100px;" /> <img id="b" src="b.gif" style="position:absolute; left:60px; top:20px;" /> <script language="javascript"> Drag.init(document.getElementById("p"), null, null, null, null, null, false, true); Drag.init(document.getElementById("g"), null, null, null, null, null, true, true); Drag.init(document.getElementById("b"), null, null, null, null, null, false, false); </script>
这个 g 是在最上层的, p 是在中间层的 , b 是在最下层的。
Drag.init(document.getElementById("p"), null, null, null, null, null, false, true);
Drag.init(.....,false,true);后面两个参数决定了组件在重叠时的地位。
最高的当然是true,true啦,最低的是false,false。理论上是有4种组合的
true,true->true,false->false,ture->false,false 。
如果你有太多要拖动的组件啦,那没办法啦,你自己可以试试改写js中的代码,让其能支持更多,9或16或更多。
例子6: http://youngpup.net/projects/dom-drag/ex6.html
这个例子中,图片的拖动是随着一定的路径,不是原先的可以随意拖动了
源代码:
<script language="javascript" src="dom-drag.js"></script> <img id="p" src="p.gif" style="position:absolute; left:20px; top:50px;" /> <script language="javascript"> window.onload = function() { Drag.init(document.getElementById("p"), null, null, null, null, null, false, false, null, mySin); } function mySin(x) { return Math.round(Math.sin((x - 20) / 10) * 10) + 50; } </script>
Drag.init(document.getElementById("p"), null, null, null, null, null, false, false, null, mySin);
看到最后2个参数了吗?倒数第二个是设置x轴上的路径的,最后一个是设置y轴上的路径的。倒数第二个参数设置为null表示在x轴上的路径是随意的,y轴则是沿着正弦路径。
例子cropper:http://youngpup.net/projects/dom-drag/cropper.html
这个例子是在一张图片上实现部分清晰显示效果。
源代码:
<html> <head> <title> - cropper - </title> <style type="text/css"> <!-- #pbox { width:300px; height:300px; overflow:hidden; } .opacity{filter: alpha(opacity=60)} --> </style> <script language="javascript" src="dom-drag.js"></script> <script language="javascript"> var oThang, oHandle, reportBox, iReportCount = 0; window.onload = function() { if (document.all || document.getElementById) { oThang = document.all ? document.all["thang"] : document.getElementById("thang") oHandle = document.all ? document.all["handle"] : document.getElementById("handle") oReport = document.all ? document.all["report"] : document.getElementById("report") Drag.init(oHandle, oThang, -250, -50, -250, -50); // report stuff oThang.onDrag = function(x, y) { reportDrag("", x, y); } } function reportDrag(who, x, y) { oReport.value = who + "" + " X = " + (x + 250) + " Y = " + (y + 250) + " W = 100 H = 100" } oThang.onDrag(-250, -250); } </script> </head> <body> <div style="width:300px; height:300px; overflow:hidden; top:20px; left:20px;"> <img src="snare_pic_large-300.jpg" /> <div id="thang" style="position:absolute; left:-250px; top:-250px;"> <img class="opacity" style="position:absolute; left:0px; top:0px;" src="selection2.gif" /> <img id="handle" style="position:absolute; left:250px; top:250px; width:100px; height:100px;" src="x.gif" /> </div> </div> <input type="text" id="report" style="width:300px;" /> </body> </html>
这里面有3张图片,一张是像素是300*300的snare_pic_large-300.jpg,一张是像素为600*600中间有个100*100空洞的selection.gif(这个我搞了半天才知道原来是中间破个洞- -#!!),最后一张是张空白图片的x.gif,其实就是利用把空图片放在selection.gif的空洞的位置,然后同过空图片带动selection.gif。
<div style="width:300px; height:300px; overflow:hidden; top:20px; left:20px;">
<img src="snare_pic_large-300.jpg" />
这个<div>是父div,里面设置了宽度跟高度方便为300px,overflow : hidden 的作用是如果放进来的比如图片的像素超过300*300,超过部分将被隐藏,这个div放在top 20,left 20的地方。
下面插入图片snare_pic_large-300.jpg。
<div id="thang" style="position:absolute; left:-250px; top:-250px;"> <img class="opacity" style="position:absolute; left:0px; top:0px;" src="selection2.gif" /> <img id="handle" style="position:absolute; left:250px; top:250px; width:100px; height:100px;" src="x.gif" /> </div>
id为thang的<div>是上面的<div>的子div,注意设置thang的top,left的位置是相对于 父<div> 的,为了把空洞放在父<div>的左上角,thang的left -250,top -250,图片selection.gif放在0,0位置,这是相对于thang的,x.gif设置成跟空洞愿意的宽度跟高度,放在250,250位置,这也是相对于thang的。
//页面加载是初始化组件
window.onload = function() { if (document.all || document.getElementById) { oThang = document.all ? document.all["thang"] : document.getElementById("thang") oHandle = document.all ? document.all["handle"] : document.getElementById("handle") oReport = document.all ? document.all["report"] : document.getElementById("report") //拖动范围相对于父组件oTHang,空洞能移动的范围是300-100=200,x=minX+200=-50,y也一样 Drag.init(oHandle, oThang, -250, -50, -250, -50); // 当oThang被拖动时调用函数reportDrag()在下面的input那里报位置 oThang.onDrag = function(x, y) { reportDrag("", x, y); } //一些比较有用的方法还有onDragStart(x,y),开始拖动时调用,onDragEnd(x,y),结束拖动时调用 } function reportDrag(who, x, y) { //实际位置应该还要在+20像素 oReport.value = who + "" + " X = " + (x + 250) + " Y = " + (y + 250) + " W = 100 H = 100" } //初始化oThang的位置到-250,-250 oThang.onDrag(-250, -250); }
相关推荐
在IT行业中,DOM(Document Object Model)拖放(DOM-drag)是一种常见且实用的技术,它允许用户通过鼠标操作在网页上移动元素,为用户提供直观的交互体验。本主题聚焦于如何利用DOM-drag功能来定制自己的用户界面,...
dom-drag源码 博文链接:https://sing.iteye.com/blog/178528
由于网上不好找,所以在这提供了一个下载,别人的东西,不收积分. 此JS用于实现DIV的拖动。
在网上发现的可以拖动div的js脚步,功能强大,如果要跨越div可以再上面加上一层div
dom-drag.js
在这个“dom-drag js拖拽的效果类.zip”文件中,我们可以期待学习到如何利用JavaScript实现DOM元素的拖放效果。拖放功能在现代网页应用中非常常见,例如文件管理器、日历应用或者自定义布局的界面等。 拖放功能主要...
### 《一个JS拖拽的效果类和dom-drag.js浅析》 #### 一、Drag类简介 在本文中,我们将探讨一个简单的JavaScript拖拽效果类——Drag类,该类可实现网页元素的拖拽功能。此类适用于需要简单拖拽交互的场景。 **Drag...
在"vue-drag-verify_verify_dragVerify卡顿_thousandm5p_vue_silly9fx_"这个标题中,"dragVerify卡顿"可能是指在使用Vue Drag Verify组件时遇到了性能问题,可能是由于大量元素渲染或拖动操作不流畅导致的。...
Vue Power Drag 的核心概念是利用Vue的数据绑定和响应式系统来实时更新DOM元素的位置,当用户在页面上拖动元素时。这种组件通常会与Vue的生命周期方法结合使用,如`mounted()`和`updated()`,以确保在拖放过程中准确...
electron-drag, 用于电子应用程序的窗口拖动 电子拖动针对 Electron 应用程序的改进窗口拖动。可以使用 -webkit-app-region css属性拖动无框架 Windows,但这禁用所有常规dom事件和用户交互,因为在应用程序中无法...
可以做什么将DOM元素拖放到父级中(或将docume vue-drag-it-dude Vue2组件拖放到任何位置,可将对象拖到任何地方您想要做什么可以将DOM元素拖放到父级(或文档,如果未指定父级的大小)中接收内容大小并更新移动限制...
描述(Describe) 基于 vue2.6 的一个 dom 元素拖拽、缩放和旋转的组件; 支持基本的触点控制、宽高位置范围值、子父级嵌套、锁定定比例和层级等;...import vueDragResizeRotate from '@liaogn/vue-drag-re
在前端开发领域,D3.js(Data-Driven Documents)是一个强大的JavaScript库,它允许开发者用数据来操作DOM(Document Object Model)。"前端项目-d3-drag.zip" 是一个基于D3.js实现的拖放功能的项目,特别关注的是D3...
拖动行为与DOM无关,因此您可以将其与SVG,HTML甚至Canvas一起使用! 您可以使用高级选择技术来扩展它,例如Voronoi叠加层或最接近目标的搜索: 最重要的是,拖动行为会自动统一鼠标和触摸输入,并避免浏览器特质...
DOM(Document Object Model)是网页内容的树形结构表示,DOM-Drag是基于DOM元素实现的拖放功能。在JavaScript中,我们可以利用`addEventListener`方法监听`mousedown`、`mousemove`和`mouseup`事件来实现元素的拖动...
标题中的“jquery-drag-slider”指的是一个基于jQuery库开发的拖动滑块组件。这个组件通常用于创建交互式的用户界面,比如图片轮播、页面滚动条或者任何需要拖动操作来浏览内容的应用。jQuery是一个广泛使用的...