`
dlcoco9999
  • 浏览: 37806 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

列表拖拽功能

    博客分类:
  • js
阅读更多
var dragobj={}
window.onerror=function(){return false}
function on_ini()// 初始化
{
     String.prototype.inc=function(s){return this.indexOf(s)>-1?true:false};// prototype是系统内置,此处是自行扩展判断一字符串内是否包含另一字符串
     var agent=navigator.userAgent;// 获取从客户端向服务器发送的HTTP协议用户代理头的值。
     window.isOpr=agent.inc("Opera");// 判断代理头值是否包含字符Opera
     window.isIE=agent.inc("IE")&&!isOpr;// 判断代理头值是否包含字符IE
     window.isMoz=agent.inc("Mozilla")&&!isOpr&&!isIE;// 判断代理头值是否包含字符Mozilla
     if(isMoz)// 如果是Mozilla的FireFox浏览器
     {
          Event.prototype.__defineGetter__("x",function(){return this.clientX+2});// 扩展event的属性:鼠标x坐标
          Event.prototype.__defineGetter__("y",function(){return this.clientY+2});// 扩展event的属性:鼠标y坐标
     }
     basic_ini();
}

function basic_ini()// 基本初始化
{
     window.$=function(obj){return typeof(obj)=="string"?document.getElementById(obj):obj};// 为当前网页添加方法:根据对象ID获取对象
     window.oDel=function(obj){if($(obj)!=null){$(obj).parentNode.removeChild($(obj))}};// 为当前网页添加方法:删除对象
}
window.onload=function()// 页面加载时
{
     on_ini();// 初始化
     var o=document.getElementsByClassName("elgg-list-item");// 获取所有的Div标题元素
     for(var i=0;i<o.length;i++)
     {
          o[i].onmousedown=function(e)// 鼠标按下时
          {
               if(dragobj.o!=null)// 如果被拖拽对象不为空(即前一对拖拽对象未释放)
                return false;
               e=e||event;// 在某些浏览器中为e?
               dragobj.o=this;// o为一个Div标题,所以取其父节点即是DIV为被拖拽对象
               dragobj.xy=getxy(dragobj.o);// 获取选中DIV边框外界相对客户区左边的坐标:上,左,宽,高
               dragobj.xx=new Array((e.x-dragobj.xy[1]),(e.y-dragobj.xy[0]));// 鼠标以Div边框外界左上角为原点的坐标.
               dragobj.o.style.width=dragobj.xy[2]+"px";// 设置div的宽(含边框)
               dragobj.o.style.height=dragobj.xy[3]+"px";// 设置div的高(含边框)
               dragobj.o.style.left=(e.x-dragobj.xx[0]+5)+"px";// 设置div的左边距(边框外界至客户区左边内部的距离+5)
               dragobj.o.style.top=(e.y-dragobj.xx[1]+5)+"px";// 设置div的上边距(边框外界至客户区左边内部的距离+5)
               dragobj.o.style.position="absolute";// 设置坐标为绝对位置
               dragobj.o.style.backgroundColor='#3980F4';// 设置浮动层的颜色
               dragobj.o.style.opacity="0.5"; // 设置浮动层透明度
               var om=document.createElement("div");// 创建一个DIV
               dragobj.otemp=om;// 创建一个临时对象,内部不包含任何东西
               om.style.width=dragobj.xy[2]+"px";// 设置临时对象宽度跟被拖拽对象相同
               om.style.height=dragobj.xy[3]+"px";// 设置临时对象高度跟被拖拽对象相同
               dragobj.o.parentNode.insertBefore(om,dragobj.o);// 将临时对象插入到被拖拽对象之前.占据被拖拽对象原位置,而在鼠标移动过程中根据鼠标位置,其将被移到相应位置,在相应位置撑出一个空位.
               return false
          }
     }
}
document.onselectstart=function(){return false}// 禁用选择文本
window.onfocus=function(){document.onmouseup()}// 页面获得焦点
window.onblur=function(){document.onmouseup()}// 页面失去焦点
document.onmouseup=function()// 鼠标松开时
{
     if(dragobj.o!=null)// 如果被拖拽对象不为空
     {
          dragobj.o.style.width="auto";
          dragobj.o.style.height="auto";
          dragobj.o.style.backgroundColor=""; // 设置透明层的颜色
          dragobj.o.style.opacity="1.0"; // 设置透明层透明度
          dragobj.otemp.parentNode.insertBefore(dragobj.o,dragobj.otemp);// 移动dragobj.o在dragobj.otemp之前插入
        
          dragobj.o.style.position="";
          oDel(dragobj.otemp);// 删除临时对象dragobj.otemp
          dragobj={};// 清空拖拽对象
     }
}
document.onmousemove=function(e)// 鼠标移动时
{
     e=e||event
     if(dragobj.o!=null)// 如果被拖拽对象不为空
     {
          dragobj.o.style.left=(e.x-dragobj.xx[0])+"px";// 设置被拖对象的左边距(鼠标距客户端距离-鼠标距Div边框外界的距离)跟随移动
          dragobj.o.style.top=(e.y-dragobj.xx[1])+"px";// 设置被拖对象的上边距(鼠标距客户端距离-鼠标距Div边框外界的距离)跟随移动
          createtmpl(e);// 移动过程中移到哪插到那
     }
}
function getxy(e)
{
     var a=new Array();
     var t=e.offsetTop;
     var l=e.offsetLeft;
     var w=e.offsetWidth;
     var h=e.offsetHeight;   
     a[0]=t;a[1]=l;a[2]=w;a[3]=h;
     return a;
}
function inner(o,e)
{
var scroll=document.documentElement.scrollTop
// IE document.body.scrollTop
     var a=getxy(o);
// a[0]-scroll) 注:当前的div的Y左边减去滚动条滚去页面的高度
     if(e.x>a[1]&&e.x<(a[1]+a[2])&&e.y>(a[0]-scroll)&&e.y<(a[0]-scroll+a[3]))// 如果e坐标在o的范围之内
     {   
          if(e.y<((a[0]-scroll)+a[3]/2))// 如果e坐标在o的上半部
              return 1;
          else
              return 2;// 如果e坐标在o的下半部
     }
     else
          return 0;// 如果e坐标在o的范围之外
}
function createtmpl(e)// 在鼠标移动过程中插入临时对象
{
var o=document.getElementsByClassName("elgg-list-item");
     for(var i=0;i<o.length;i++)// 遍历内部所有子DIV
     {
          if(o[i]==dragobj.o)
             continue;
          var b=inner($(o[i]),e);// 判断e相对$("m"+i)的位置:上半部,下半部,外面
          if(b==0)// 在外面
             continue;                 
          dragobj.otemp.style.width=$(o[i]).offsetWidth;  
          if(b==1)// 上半部
          {    
               $(o[i]).parentNode.insertBefore(dragobj.otemp,$(o[i]));// 在$(o[i])的前面插入dragobj.otemp
          }
          else
          {
               if($(o[i]).nextSibling==null)// 如果是最后一项
               {     
                    $(o[i]).parentNode.appendChild(dragobj.otemp);// 追加到后面
               }
               else
               {           
             
                    $(o[i]).parentNode.insertBefore(dragobj.otemp,$(o[i]).nextSibling);// 如果在下半部,则在其后一项之前插入
               }
          }
          return
     }

}
分享到:
评论

相关推荐

    APP列表之拖拽

    本教程将深入讲解如何在Android应用程序中实现列表拖拽功能,帮助开发者提升应用的交互性。 首先,我们需要理解Android中的ListView和RecyclerView组件,它们是实现列表展示的核心控件。ListView是早期版本Android...

    jqeury实现列表拖拽排序

    在JSP页面中,我们可以通过以下步骤来实现列表拖拽功能: 1. **定义可拖拽元素**:首先需要为可拖拽的元素添加特定的CSS类(如`.myTr`),以便通过jQuery选择器对其进行操作。 ```javascript $(".myTr")....

    树菜单拖拽功能带拖拽特效

    "树菜单拖拽功能带拖拽特效"这一技术就是为了让用户能够更直观、更方便地操作数据,尤其是在处理层次结构数据时。这里我们将深入探讨如何实现这个功能。 首先,"树菜单"(TreeView)是一种常见的Windows控件,用于...

    Java实现拖拽列表项的排序功能

    总结一下,Java实现拖拽列表项的排序功能主要包括以下步骤: 1. 启用UI组件的拖放功能,如设置`AllowDrop`、`CanReorderItems`和`IsSwipeEnabled`属性。 2. 监听并处理拖放事件,更新数据模型以反映拖放操作。 3. ...

    vue实现列表拖拽排序的功能

    在日常开发中,特别是管理端,经常会遇到要实现拖拽排序的效果;这里提供一种简单的实现方案。  此例子基于vuecli3 首先,我们先了解一下js原生拖动事件:  在拖动目标上触发事件 (源元素): ondragstart – 用户...

    listbox拖拽功能实现

    " ListBox拖拽功能实现" ListBox控件是Windows Forms应用程序中的一种常见控件,它能够显示一组项目,并允许用户进行选择和拖拽操作。实现ListBox控件的拖拽功能,可以使用户更方便地在不同的ListBox控件之间移动...

    VC 列表框 拖拽

    综上所述,实现"VC 列表框 拖拽"功能涉及了Windows消息处理、MFC组件以及C++编程技巧。通过以上步骤,我们可以创建出能够方便地在两个列表框之间交换数据的应用,极大地提高了用户的操作效率和软件的易用性。这个...

    列表项自由拖拽功能.zip

    列表项自由拖拽功能

    mfc列表拖拽,控制一个程序一个进程

    总结来说,实现"MFC列表拖拽,控制一个程序一个进程"涉及以下步骤: 1. 使用CListCtrl并设置拖放标志。 2. 实现IDropTarget接口以接收拖放数据。 3. 在DragEnter、DragOver和Drop方法中处理拖放过程。 4. 使用...

    Android列表拖拽,左右滑动删除

    "Android列表拖拽,左右滑动删除"是一个常见的功能,它提升了用户在列表数据操作时的体验。本示例代码Demo着重展示了如何实现这一功能,特别是使用了DragSortListView库来帮助完成。 DragSortListView是一个强大的...

    拖拽列表.html

    /** 拖拽功能实现原理和说明: 1、说明:拖拽实现一般有两种方式,一种是使用html的新特性dragable,但是由于在火狐浏览器上dragable每拖拽一次会打开一个新的标签, 尝试阻止默认行为和冒泡都无法解决,所以使用第...

    android 拖拽列表listview

    在本案例中,我们将深入探讨如何在Android中实现ListView的行拖拽功能,以及如何实现在多级列表间的行拖拽。 首先,要实现ListView的行拖拽,我们需要使用适配器(Adapter)来管理和更新ListView的数据。适配器将...

    Qt5 拖拽功能

    在本项目“Qt5 拖拽功能”中,我们将深入探讨如何实现这一功能,特别是针对列表框(QListWidget)的拖放操作。以下是关于Qt5拖放功能的详细讲解。 首先,为了实现拖放功能,我们需要确保你的Qt应用程序支持拖放操作...

    Android-DragItemView列表视图拖拽库

    总之,`DragItemView`是一个强大的工具,它简化了Android应用中实现列表视图拖拽功能的过程,使开发者能够更加专注于应用的核心业务逻辑。通过合理利用其提供的API和定制选项,我们可以为用户提供更加直观、个性化的...

    从Winform各种空间中拖拽功能实现,并且有拖拽跟随影子

    这个项目可以从多个控件拖拽,并且拖拽过程中显示的影子可以设置各种颜色,位置都是可以的,拖拽的对象包括文本、下拉框、列表等,要研究winform下的控件拖拽功能的朋友可以看看,说明是VB.NET+Winform,不需要的朋友...

    flex 拖拽功能 中文文档

    ### Flex拖拽功能详解 Flex框架提供了一套强大的机制用于实现拖放(drag and drop)功能,这在用户界面设计中极为常见,特别是在构建高度交互性的应用时。本文旨在深入探讨Flex中的拖拽功能,包括其工作原理、关键...

    React.js组件实现拖拽排序组件功能过程解析

    【React.js组件实现拖拽排序功能详解】 在React.js中实现拖拽排序功能,我们可以利用HTML5的拖放API(Drag and Drop API)来创建一个交互性强且用户体验良好的组件。这个组件的核心在于处理拖放事件并实时更新数据...

    Vue组件Draggable实现拖拽功能

    Draggable为基于Sortable.js的vue组件,用以实现拖拽功能。 具体说明,请参考:学习链接 npm官方演示: vuedraggable特性: 支持触摸设备 支持拖拽和选择文本 支持智能滚动 支持不同列表之间的拖拽 不以jQuery...

    学习使用ReactDnD实现嵌套列表的拖拽排序

    `nesting-dnd-demo-master`这个压缩包很可能包含了实现嵌套列表拖拽排序的示例代码。在代码中,你可以看到如何定义`DragSource`和`DropTarget`的规格,以及如何在拖放事件中更新状态。 例如,一个简单的`...

    最简单的微信小程序拖拽排序列表.zip

    在`app.json`或`project.config.json`中,开启拖拽功能: ```json { "debug": false, "miniprogramRoot": ".", "window": { "enablePullDownRefresh": false, // 关闭下拉刷新 "enableDrag": true // 开启拖拽...

Global site tag (gtag.js) - Google Analytics