`
yunhaifeiwu
  • 浏览: 162330 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

拖动管理组件

阅读更多
说明:
  
    在作网页时,有时想允许用户拖动一个标签,此时用第三方UI组件库是个不错的注意。如果想自已写如何写呢?自已只想写一次,以后都可用,又如何做呢?

    下面中的源代码实现了这个想法。在firefox表现特好,在ie6下可以拖动,google的还没测试。

    下面的代码中,FDrag类是核心的代码。对外界来说,仅有一个add方法。如果用户想让哪个标签可以拖动,只需把该标签的id名通过add方法传进去即可。
    例:下面id为xxx,yyy的div标签可以拖动。
<<!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="utf-8">
<head>
<title> 拖动对象 Drag Object (兼容:IE、Firefox、 ... )</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />

<script language="javascript">

    function FDrag(){
        this.ie=document.all;
        this.nn6=document.getElementById&&!document.all;
        this.isdrag=false;
        this.x;
        this.y;
        this.oDragObj;
        this.nTX;
        this.nTY;
        this.list = new Array();
        this.listTarg=new Array();
        this.add=function (divID){
            this.list.push(divID);//var d=list.pop();
	        var d=document.getElementById(divID);
            this.listTarg.push(d);
            d.style.position="relative";
	        d.style.cursor="move";
			
			d.onmousedown=(function(v) {
				return function() {
					v.initDrag(v,arguments[0]);//  arguments装着鼠标事件
				};
			}) (this);
	
			d.onmouseup=(function(v) {
				return function() {
					v.isdrag=false;
				};
			}) (this);
			
			d.onmousemove=(function(v) {
				return function() {
					v.moveMouse(v,arguments[0]); //arguments装着鼠标事件
				};
			}) (this);

        }

        this.moveMouse=function (o,e) {
            if (o.isdrag) {
                o.oDragObj.style.top  =  (o.nn6 ? o.nTY + e.clientY - o.y : o.nTY + event.clientY - o.y)+"px";
                o.oDragObj.style.left  =  (o.nn6 ? o.nTX + e.clientX - o.x : o.nTX + event.clientX - o.x)+"px";
                return false;
            }
        }

        this.initDrag=function (o,e) {
            var oDragHandle =o.nn6 ? e.target : event.srcElement;
            var isExist=false;
            for (var i=0 ; i<this.list.length;i++){
                if (this.list[i]==oDragHandle.id){
                    isExist=true;
                    break;
                }
            }

            if(isExist){
                o.isdrag = true;
                o.oDragObj = oDragHandle;
                o.nTY = parseInt(o.oDragObj.style.top+0);
                o.y = o.nn6 ? e.clientY : event.clientY;
                o.nTX = parseInt(o.oDragObj.style.left+0);
                o.x = o.nn6 ? e.clientX : event.clientX;               
                return false;
            }
        }    

    }

</script>
</head>
<body>

<div id="xxx" style="border:1px solid #ff6d00;background:#ffd801;width:240px;padding:5px 0;">xxx11
       <div id="zzz" style="border:1px solid #ff6d00;background:#ffd801;width:240px;padding:5px 0;">zzz11</div>
</div>
<div id="yyy" style="border:1px solid #ff6d00;background:#ffd801;width:240px;padding:5px 0;"
       >yyy11</div>



<script language="javascript">
   var f=new FDrag ();
   f.add("xxx");
   f.add("yyy");
</script>
</body>
</html>

分享到:
评论
2 楼 yunhaifeiwu 2008-11-29  
walkman 写道
.dragAble {position:relative;cursor:move;}

这个样式最好是在给标签启用拖动的时候动态写到其 style 上更好,这样使用的时候就可以不用考虑是否忘了给标签加上 class="dragAble", 封装得也更彻底


感谢walkman回复!你说的很有道理,已经更改!
1 楼 walkman 2008-11-29  
.dragAble {position:relative;cursor:move;}

这个样式最好是在给标签启用拖动的时候动态写到其 style 上更好,这样使用的时候就可以不用考虑是否忘了给标签加上 class="dragAble", 封装得也更彻底

相关推荐

    基于Vue.js的可拖拽树组件

    - Vue.js 是一套用于构建用户界面的渐进式框架,强调声明式渲染,易于上手,同时提供高级特性如组件化、状态管理(Vuex)和路由管理(Vue Router)。 - 在Vue.js中,组件是构建应用的基本单元,可以复用并组合成...

    React-react拖动排序组件

    总结来说,创建React的拖动排序组件需要对React的基础有深入理解,包括事件处理、状态管理以及性能优化。同时,了解并掌握拖放API的使用也是必不可少的。通过实践和研究"move-master"项目,开发者可以更好地掌握这一...

    react-reactdraggableReact可拖拽组件

    3. **状态管理**:如果需要在拖动过程中更新其他组件的状态,可以利用React的state和props来传递信息。 4. **无障碍性(Accessibility)**:确保你的拖动元素对屏幕阅读器友好,可以添加`aria-live`、`aria-grabbed...

    flex组件拖拽框架

    Flex组件拖拽框架是一种在Adobe Flex环境中实现的交互设计技术,允许用户通过鼠标操作将组件在界面上自由移动,从而提升用户体验和应用的可操作性。这个框架通常由一系列类和方法组成,用于处理拖放事件,跟踪鼠标...

    Jquery可拖拽布局组件

    该组件适用于各种需要动态布局的场景,如仪表盘、管理后台、多面板应用等。它可以有效地组织和展示复杂的信息,提升用户体验。 ### 8. 集成与扩展 jQuery Portal可以轻松与其他jQuery插件或库结合使用,如Bootstrap...

    vuegg一个通过可视化拖拽组件的方式来生成VUEGUI原型界面

    同时,VueGG可能还包含了状态管理工具,如Vuex,帮助组织和管理组件间的通信,确保整个原型界面的逻辑清晰、可维护。 在实际应用中,VueGG可以帮助团队快速创建出高保真原型,以便于产品团队进行用户体验测试和迭代...

    【JavaScript源代码】基于Vue3的全屏拖拽上传组件.docx

    Vue3的组合式API和响应式系统使得在组件内管理状态和生命周期更加灵活方便。同时,Fetch API提供了Promise化的接口,可以与async/await配合,使得异步操作更易于理解和维护。总的来说,结合Vue3和HTML5拖拽API,可以...

    易语言拖动一个组件到其他组件上

    总的来说,实现易语言中组件的拖放功能,涉及到对鼠标事件的监听、Windows API的调用以及组件关系的管理。通过理解并熟练运用这些技术,开发者可以创建出更加用户友好的应用程序,提升用户的交互体验。在实际开发...

    JQ JS javascript layui UI组件 元素 div 拖动插件

    本资源涉及的是一个基于jQuery(JQ)、JavaScript(JS)和layui框架的UI组件,特别关注的是元素(尤其是div)的拖动功能。拖动插件是一种常见且实用的增强交互性的工具,它允许用户通过鼠标操作移动页面上的元素,...

    易语言源码拖动一个组件到其他组件上.rar

    2. **组件状态管理**:当用户开始拖动组件时,需要改变组件的状态以指示拖放过程。这可能涉及到设置组件的透明度、边框样式或其他视觉效果,以提示用户可以进行拖放操作。 3. **数据传输**:在拖放过程中,通常需要...

    基于vue、iview实现tree组件可拖拽、双击编辑

    IView是一个基于Vue的UI组件库,它提供了丰富的预设组件,使得开发者可以快速搭建美观的后台管理系统。在这个场景下,我们将探讨如何利用Vue和IView实现一个具有拖拽和双击编辑功能的Tree组件。 首先,让我们了解...

    基于iView和he-tree-vue的一个拖拽树形组件

    3. **拖拽功能**:用户可以通过鼠标拖动节点改变树形结构,这种功能在组织结构、任务分配或者文件管理场景下非常实用,允许用户自由调整数据层次关系。 4. **增、删、改功能**:组件支持添加新的子节点、删除节点...

    基于jquery的拖拽交换和拖拽排序组件

    拖拽交换和拖拽排序功能在网页应用中非常常见,例如在日程管理、项目管理或在线购物平台的列表中,用户可以通过拖放元素来重新排列顺序或交换位置。jQuery提供了强大的插件和API,使得实现这些功能变得简单易行。 ...

    可缩放、拖动、自适应布局组件demo

    这样的组件在构建复杂且灵活的Web应用,如仪表盘、项目管理工具或设计工作台时非常有用。 首先,"拖动"(dragable)功能是通过JavaScript库或者框架的API实现的,它允许用户通过鼠标或触摸设备直接操纵界面上的元素...

    dragcalendar一个可拖拽日历组件

    "dragcalendar"或"drag-calendar"是一个专为JavaScript开发设计的可拖拽日历组件,它允许用户通过直观的拖放操作来管理日程和事件。本文将深入探讨这个组件的核心特点、使用方法以及如何将其集成到项目中。 首先,...

    Flex 拖拽例子 从不同组件间拖拽

    在`drop`事件处理函数中,可以通过`event.data`访问拖动数据,进行相应的操作,比如将拖动的对象添加到目标组件或执行其他业务逻辑。 ```actionscript import flash.display.InteractiveObject; import flash....

    基于html5dragapi实现的vue树形拖拽组件

    这个组件对于构建数据管理和配置界面等场景尤其有用,因为它可以提供直观的交互体验。 Vue.js的核心特性包括组件化、虚拟DOM、响应式数据绑定和指令系统。在这个项目中,组件是主要的构造单元,它封装了可复用的UI...

    Axure 使用ElementUI组件的 web后台管理

    在本文中,我们将深入探讨如何使用Axure RP 9结合ElementUI组件库来构建一个功能丰富的Web后台管理系统。ElementUI是基于Vue.js的组件库,提供了丰富的UI元素,适用于快速开发高质量的前端界面。而Axure则是一款强大...

    源自开源的甘特图组件jquery gantt 可拖拽

    综上所述,"源自开源的甘特图组件jquery gantt 可拖拽" 提供了一个强大且易用的工具,帮助开发者构建具有动态调整功能的项目管理界面。通过拖拽和resize功能,用户可以直观地调整任务的时间安排,从而提高项目管理的...

    Vue 将一个组件嵌入到另一个组件中

    7. **Vuex状态管理**:对于更复杂的组件间通信,可以使用Vuex来集中管理应用的状态。组件通过调用Vuex的actions和mutations来改变状态,所有订阅了该状态的组件都会实时更新。 通过以上的7个实例,我们可以看到Vue...

Global site tag (gtag.js) - Google Analytics