找了很多插件,發現還是自己寫的比較熟悉,還可以輸出各種參數。
一、移動和縮放需要的事件
jQuery提供了很多事件,移動和縮放需要的隻要三個:movedown、mousemove、mouseup,滑鼠按下的時候表示開始可移動和縮放;滑鼠移動時,元素随之移動或縮放;滑鼠松開時,移動或縮放結束。
drag.mousedown(function(){//在需要移動或縮放的元素上綁定滑鼠按下事件
$(this).addClass("down");
myEvent = event || window.event;
fx = myEvent.clientX;
fy = myEvent.clientY;
selfx=$(this).offset().left;
selfy=$(this).offset().top;
wx=fx-selfx;//得到滑鼠位置和元素目前位置之間的差
wy=fy-selfy;
$(document).bind('mousemove',function(){//把mousemove綁定到document對象上,防止滑鼠移動太快
myEvent = event || window.event;
topy=myEvent.clientY-wy;
topx=myEvent.clientX-wx;
drag.css({ "top":topy, "left":topx});//設定元素位置,需要絕對定位
})
})
drag.mouseup(function(){
$(document).unbind("mousemove");
$(this).removeClass("down")
})
drag.hover(function(){$(this).addClass("hv")},function(){$(this).removeClass("hv")})//滑鼠經過時變為可移動光标
二、CSS設定
可移動或可縮放元素需要絕對定位。還可以設定滑鼠經過和按下時的變化。
<div class="drag"></div>
.drag{position:absolute;}
.drag.hv{cursor:move}
.drag.down{background:gray;}
三、縮放設定
在可移動元素中右下角添加一個元素,标志可以縮放操作區域。當滑鼠位置在縮放操作區域時,不移動,而是改變元素width和height
<div class="drag"><span></span></div>
.drag span{position:absolute; right:0; bottom:0; cursor:se-resize; display:none;}
.drag.hv span{display:block;}
四、下面是完整源代碼:
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>jQuery[無需插件]可移動(draggable)和可縮放(sizable)網頁元素</title>
<script src="jquery.js" type="text/javascript"></script>
<style>
body,dl,dd,ul,li,h3{ margin:0; padding:0;}
body{ background:#f0f0f0; font:12px/150% verdana;}
#hd{ height:100px; background:gray;}
#ft{ height:30px;}
#mn{ width:1000px; margin:auto;}
.draggable{ width:1000px; height:1480px;}
.drag{ line-height:200%; padding:0 10px;position:absolute; width:auto;/*white-space:nowrap;*/max-width:1000px;}
.drag b{border-right:1px solid red;border-bottom:1px solid red; width:5px; height:5px; line-height:5px; position:absolute; right:0; bottom:0; cursor:se-resize; display:none;}
.drag.hv{ cursor:move; background:#ffc;/*border:1px dashed #999;*/}
.drag.hv b{ display:block;}
.drag.down{ background:#ccc;}
#d1{ top:319px;left:371px;width:177px;height:38px;}
#d2{ top:549px;left:402px;}
#d3{ top:596px;left:403px;}
#d4{ top:639px;left:365px;}
#d5{ top:638px;left:525px;width:92px;height:25px;}
#d6{ top:687px;left:524px;}
#d7{ top:833px;left:275px;width:664px;height:121px;}
</style>
</head>
<body>
<div id="hd"></div>
<div id="mn">
<dl class="draggable">
<dd class="drag" id="d1">
文字區域
<b></b> </dd>
<dd class="drag" id="d2">
文字區域
<b></b> </dd>
<dd class="drag" id="d3">
文字區域
<b></b> </dd>
<dd class="drag" id="d4">
2011-5-5
<b></b> </dd>
<dd class="drag" id="d5">
文字區域
<b></b> </dd>
<dd class="drag" id="d6">
文字區域
<b></b> </dd>
<dd class="drag" id="d7">
<p>6月15日,生乳國家标準頒布實施一年後,素有“中國奶業第一炮筒”之稱的廣州市奶業協會理事長王丁棉在業内會議上炮轟該标準為“全球最差,是全球乳業的恥辱”,并稱“中國生乳标準被個别生産的大企業綁架”。</p>
<p>這場業内讨論,再一次引發公衆對中國乳制品行業的信任危機。</p>
<p>中國乳品是否真的過低?依據在哪裡?修改前的标準是否真的難以達到?昨天,本報再次就此事對話王丁棉。</p>
<p><strong>【很少的蛋白質,那麼高的細菌,那還不如喝開水。消費者錢花了,得不到應有的營養回報,還損害健康】</strong></p>
<b></b> </dd>
</dl>
</div>
<div id="ft"></div>
<script>
document.onselectstart=function(){return false};//無法選擇内容
$(document).ready(function(){
//拖動
var drag=$(".drag");
drag.hover(function(){$(this).addClass("hv")},function(){$(this).removeClass("hv")})
drag.mousedown(function(myEvent){
$(this).addClass("down");
myEvent = event || window.event;
fx = myEvent.clientX;
fy = myEvent.clientY;
selfx=$(this).offset().left;
selfy=$(this).offset().top;
wx=fx-selfx;//得到滑鼠位置和元素目前位置之間的差,友善下面mousemove事件裡使用clientX(Y)換算對應的top(left)值。
wy=fy-selfy;
drag=$(this);
oldScrollTop = $(document).scrollTop();
var inZoomArea = (wx>drag.width()+5 && wy+oldScrollTop>drag.height()-5);
$(this).text(fy+":"+selfy+":"+oldScrollTop);
if(inZoomArea)
{//縮放
$(document).bind('mousemove',function(myEvent){
myEvent = event || window.event;
topy=myEvent.clientY+$(document).scrollTop()-selfy;
topx=myEvent.clientX-selfx;
drag.css({ "height":topy+3, "width":topx-17});
})
}else{//移動
$(document).bind('mousemove',function(myEvent){
myEvent = event || window.event;
topy=myEvent.clientY-wy;
topx=myEvent.clientX-wx;
var newScrollTop = $(document).scrollTop();
var fixTop = newScrollTop - oldScrollTop;
if(fixTop!=0) topy+=fixTop;//修複當拖動到産生滾動條時drag與滑鼠位置錯位的bug
drag.css({ "top":topy, "left":topx});
})
}
})
drag.mouseup(function(){
$(document).unbind("mousemove");
$(this).removeClass("down");
})
})
</script>
</body>
</html>