博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
客户端拖动控件封装(让拖动变得更简单)
阅读量:5970 次
发布时间:2019-06-19

本文共 3696 字,大约阅读时间需要 12 分钟。

在一些交互性强的前端页面中,经常用到物件拖动,因此封装了一下拖动控件的代码。

使用时只需绑定htc拖动控件,然后设定一些可拖动控件(其position需设为absolute)的canMove属性(为1表示可以拖动),layernum属性(拖动时,移动哪一个父元件)

None.gif
<!--
None.gifAuthor:        Kw.Tsou
None.gifDate:        2005/11/26
None.gifContent:    为页面上的元件提供自由移动的功能
None.gifUseMark:    在body(或其它容器)上behavior此物件,然后在需要移动的物件上设置canMove = "1" ,如果不是移动本身,则可以设置layernum指向其父元素.(注意:该移动的物件的position必须为absolute)
None.gif
-->
None.gif
<
PUBLIC:COMPONENT
>
None.gif    
<
PUBLIC:ATTACH 
EVENT
="onmousedown"
 ONEVENT
="move_eDown()"
 
/>
None.gif    
<
PUBLIC:ATTACH 
EVENT
="onmouseup"
 ONEVENT
="move_eUp()"
 
/>
None.gif    
<
PUBLIC:ATTACH 
EVENT
="onmousemove"
 ONEVENT
="move_eMove()"
 
/>
None.gif    
<
PUBLIC:EVENT 
ID
="moveevent"
  NAME
="ontagmove"
/>
None.gif
</
PUBLIC:COMPONENT
>
ExpandedBlockStart.gifContractedBlock.gif
<
SCRIPT 
Language
="JavaScript"
>
dot.gif
InBlock.gif    
var current = null;
InBlock.gif    
var offsetX = 0;
InBlock.gif    
var offsetY = 0;
InBlock.gif    
var dragging = false;
InBlock.gif    
var startedDragging = false;
InBlock.gif    
var ismove = false;
InBlock.gif    
InBlock.gif    
function setCurrent(w)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        current 
= w;
ExpandedSubBlockStart.gifContractedSubBlock.gif        
if(current.style.position!="absolute")dot.gif{
InBlock.gif            alert(
"可移动物件的position必须为absolute,才可更好地移动");
InBlock.gif            
return;
ExpandedSubBlockEnd.gif        }
InBlock.gif        
var ex = event.clientX;
InBlock.gif        
var ey = event.clientY;
InBlock.gif        offsetX 
= event.x - current.offsetLeft;
InBlock.gif        offsetY 
= event.y - current.offsetTop;
InBlock.gif        dragging 
= true;
InBlock.gif        ismove 
= false;
ExpandedSubBlockEnd.gif    }
InBlock.gif
InBlock.gif    
function moveCurrent()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
if (!dragging || !current)
InBlock.gif            
return;
InBlock.gif            
InBlock.gif        
if (event.button == 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            releaseCurrent();
InBlock.gif            
return;
ExpandedSubBlockEnd.gif        }
InBlock.gif          
InBlock.gif        
if (!startedDragging)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            startedDragging 
= true;
ExpandedSubBlockEnd.gif        }
InBlock.gif          
InBlock.gif        
var ex = event.clientX;
InBlock.gif        
var ey = event.clientY;
InBlock.gif        
var newl = ex - offsetX;
InBlock.gif        
var newt = ey - offsetY
ExpandedSubBlockStart.gifContractedSubBlock.gif        
if(newl!=current.style.pixelLeft||newt!=current.style.pixelTop)dot.gif{
InBlock.gif            current.style.pixelLeft 
= ex - offsetX;
InBlock.gif            current.style.pixelTop 
= ey - offsetY;
InBlock.gif            ismove 
= true;
ExpandedSubBlockEnd.gif        }
InBlock.gif        
InBlock.gif        window.event.returnValue 
= false;
InBlock.gif        window.event.cancelBubble 
= true;
InBlock.gif        
ExpandedSubBlockEnd.gif    }
InBlock.gif
InBlock.gif    
function releaseCurrent()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        current
=null;
InBlock.gif        dragging 
= false;
InBlock.gif        startedDragging 
= false;
InBlock.gif        window.event.returnValue 
= false;
InBlock.gif        window.event.cancelBubble 
= true;
ExpandedSubBlockEnd.gif    }
  
InBlock.gif
InBlock.gif    
//取得移动对象(如只能拖动标题栏进行移动)
ExpandedSubBlockStart.gifContractedSubBlock.gif
    function getOpreateElement(el)dot.gif{
InBlock.gif        
//debug();
InBlock.gif
        var ret = el;
InBlock.gif        
var layernum = 0;
InBlock.gif        
if(el.layernum)
InBlock.gif            layernum 
= parseInt(el.layernum);
InBlock.gif        
for(var i=0;i<layernum;i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            ret 
= ret.parentElement;
ExpandedSubBlockEnd.gif        }
InBlock.gif        
return ret;
InBlock.gif
ExpandedSubBlockEnd.gif    }
InBlock.gif
InBlock.gif    
function move_eDown()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
var e = window.event;
InBlock.gif        
var el = e.srcElement;
ExpandedSubBlockStart.gifContractedSubBlock.gif        
if(el.canMove=="1")dot.gif{
InBlock.gif            el 
= getOpreateElement(el);
ExpandedSubBlockStart.gifContractedSubBlock.gif            
if(!el.isLock)dot.gif{
InBlock.gif                
if(!(el.isResize=="1"&&el.runtimeStyle.cursor.indexOf("resize")>0))
InBlock.gif                    setCurrent(el);
ExpandedSubBlockEnd.gif            }
ExpandedSubBlockEnd.gif        }
ExpandedSubBlockEnd.gif    }
InBlock.gif
InBlock.gif    
function move_eUp()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
var tmp =null;
InBlock.gif        
if(current!=null)
InBlock.gif            tmp 
= current;
InBlock.gif        releaseCurrent();
ExpandedSubBlockStart.gifContractedSubBlock.gif        
if(tmp!=null&&ismove)dot.gif{
InBlock.gif            
InBlock.gif            
var evt = createEventObject();
InBlock.gif            evt.src 
= tmp;
ExpandedSubBlockStart.gifContractedSubBlock.gif            
try dot.gif{ moveevent.fire(evt); } catch(e) dot.gif{};
ExpandedSubBlockEnd.gif        }
InBlock.gif        ismove 
= false;
InBlock.gif        tmp 
= null;
InBlock.gif        
ExpandedSubBlockEnd.gif    }
InBlock.gif
InBlock.gif    
function move_eMove()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        moveCurrent();
ExpandedSubBlockEnd.gif    }
ExpandedBlockEnd.gif
None.gif
</
SCRIPT
>
None.gif
None.gif
None.gif
<
html
>
None.gif
<
head
>
None.gif
<
title
>
什么都可以拖动
</
title
>
ExpandedBlockStart.gifContractedBlock.gif
<
style
>
dot.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifbody,div,td,font
{
dot.gif}
{
font:menu;}
ExpandedSubBlockStart.gifContractedSubBlock.gifdiv,td
{
dot.gif}
{
text-align:center}
None.gif
</
style
>
None.gif
</
head
>
None.gif
<
body 
style
="margin:0px"
>
None.gif
<
div 
ontagmove
="window.status=' left:' + window.event.src.offsetLeft + ' top:' + window.event.src.offsetTop"
 style
="margin:3px;position:absolute;overflow:hidden;behavior:url(BlogMoveAble.htc);border:1px solid gray;width:90%;height:90%;background-color:#efefef"
>
None.gif    
<
div 
canMove 
= "1"
 style
="background-color:gray;border:1px solid red;cursor:move;top:20px;left:20px;position:absolute;width:100px;height:100px;"
>
None.gif        这是一个div
None.gif    
</
div
>
None.gif    
<
div  
style
="background-color:#e1e1e1;border:1px solid blue;;top:120px;left:120px;position:absolute;width:180px;height:120px;"
>
None.gif        
<
div 
style
="height:30px;border:1px solid white;background-color:white;color:black;cursor:move"
 canMove
="1"
 layernum
="1"
>
只有标题可以拖动
</
div
>
None.gif        这是一个div
None.gif    
</
div
>
None.gif    
<
table 
border
="1"
 bordercolor
="green"
 style
="width:50%;height:50%;position:absolute"
>
None.gif        
<
tr
>
None.gif            
<
td 
canMove
="1"
 layernum
="3"
 colspan
="2"
 style
="cursor:move;background-color:blue;color:white"
>
这是表格的标题行
</
td
>
None.gif        
</
tr
>
None.gif        
<
tr
>
None.gif            
<
td
>
1
</
td
>
None.gif            
<
td
>
2
</
td
>
None.gif        
</
tr
>
None.gif        
<
tr
>
None.gif            
<
td
>
3
</
td
>
None.gif            
<
td
>
4
</
td
>
None.gif        
</
tr
>
None.gif    
</
table
>
None.gif
</
div
>
None.gif
</
body
>
None.gif
</
html
>
None.gif

预览:

下载:

你可能感兴趣的文章
《Storm分布式实时计算模式》——2.4 把toplogy提交到集群中
查看>>
防盗功能!Windows Phone 安全特性更上一层楼
查看>>
《Linux命令行大全》——第2章 导 航 2.1 理解文件系统树
查看>>
《高级无线网络—4G技术》——1.2 协议增强器
查看>>
《文明之光 第二册》一一10.7 海上马车夫—— 荷兰的崛起(2)
查看>>
Android L 值不值得刷?十个问题解疑惑
查看>>
通过yum快速安装cacti
查看>>
《MATLAB智能算法超级学习手册》一一1.3 符号变量的应用
查看>>
《深入解析IPv6(第3版)》——2.3 应用程序支持
查看>>
《深入实践Spring Boot》一1.3 使用Spring Boot
查看>>
Regression, 回归问题
查看>>
一个可以显示Linux命令运行进度的伟大工具
查看>>
戴文的Linux内核专题:25 配置内核 (21)
查看>>
《Android游戏开发详解》一2.6 构建一个简单的计算器程序
查看>>
每日Ubuntu小技巧——怎样修改你的计算机名字
查看>>
MATLAB 数据分析方法(第2版)1.6 MATLAB通用操作实例
查看>>
“网络黑产”团伙勒索日入百万 专家建议企业加入网络安全“经适房”
查看>>
《Redis官方文档》 Pipelining – 请求应答模式和往返延时
查看>>
深入实践Spring Boot3.2.3 修改控制器
查看>>
《PHP、MySQL和Apache入门经典(第5版)》一一1.4 在Mac OS X上安装XAMPP
查看>>