jquery實(shí)現(xiàn)拖動(dòng)效果
因?yàn)橄雽?shí)現(xiàn)相框的拖到,找了半天的原因愣是沒(méi)有找到錯(cuò)誤,所以,只能翻看源碼了
如何實(shí)現(xiàn)拖動(dòng)效果?
首先分析下拖動(dòng)效果原理:
1.當(dāng)鼠標(biāo)在被拖動(dòng)對(duì)象上按下鼠標(biāo)(觸發(fā)onmousedown事件,且鼠標(biāo)在對(duì)象上方)
2.開(kāi)始移動(dòng)鼠標(biāo)(觸發(fā)onmousemove事件)
3.移動(dòng)時(shí)更顯對(duì)象的top和left值
4.鼠標(biāo)放開(kāi)停止拖動(dòng)(觸發(fā)onmouseup事件)
注意:拖動(dòng)的對(duì)象必須是定位對(duì)象(即設(shè)置了position:absolute或 relative)。
也就是說(shuō)拖動(dòng)事件=onmousedown事件+onmousemove事件
整個(gè)過(guò)程就是處理這三個(gè)事件來(lái)模擬drag事件
現(xiàn)在看看我實(shí)現(xiàn)的源代碼:
html代碼:
<div class="drag"> <p class="title">標(biāo)題(點(diǎn)擊標(biāo)題拖動(dòng))</p> </div> <div class="drag1"> <p class="title">標(biāo)題</p> 點(diǎn)擊我移動(dòng) </div>
jquery插件代碼:
(function($){ $.fn.drag=function(options){ //默認(rèn)配置 var defaults = { handler:false, opacity:0.5 }; // 覆蓋默認(rèn)配置 var opts = $.extend(defaults, options); this.each(function(){ //初始標(biāo)記變量 var isMove=false, //handler如果沒(méi)有設(shè)置任何值,則默認(rèn)為移動(dòng)對(duì)象本身,否則為所設(shè)置的handler值 handler=opts.handler?$(this).find(opts.handler):$(this), _this=$(this), //移動(dòng)的對(duì)象 dx,dy; $(document) //移動(dòng)鼠標(biāo),改變對(duì)象位置 .mousemove(function(event){ // console.log(isMove); if(isMove){ //獲得鼠標(biāo)移動(dòng)后位置 var eX=event.pageX,eY=event.pageY; //更新對(duì)象坐標(biāo) _this.css({'left':eX-dx,'top':eY-dy}); } }) //當(dāng)放開(kāi)鼠標(biāo),停止拖動(dòng) .mouseup(function(){ isMove=false; _this.fadeTo('fast', 1); //console.log(isMove); }); handler //當(dāng)按下鼠標(biāo),設(shè)置標(biāo)記變量isMouseDown為true .mousedown(function(event){ //判斷最后觸發(fā)事件的對(duì)象是否是handler if($(event.target).is(handler)){ isMove=true; $(this).css('cursor','move'); //console.log(isMove); _this.fadeTo('fast', opts.opacity); //鼠標(biāo)相對(duì)于移動(dòng)對(duì)象的坐標(biāo) dx=event.pageX-parseInt(_this.css("left")); dy=event.pageY-parseInt(_this.css("top")); } }); }); }; })(jQuery);
調(diào)用方法:
$(function(){ //拖動(dòng)標(biāo)題 $(".drag").drag({ handler:$('.title'),//操作拖動(dòng)的對(duì)象,此對(duì)象必須是移動(dòng)對(duì)象的子元素 opacity:0.7 //設(shè)置拖動(dòng)時(shí)透明度 }); //拖動(dòng)主體對(duì)象 $(".drag1").drag({ opacity:0.7 }); });
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 針對(duì)后臺(tái)列表table拖拽比較實(shí)用的jquery拖動(dòng)排序
- jQuery動(dòng)態(tài)添加可拖動(dòng)元素完整實(shí)例(附demo源碼下載)
- 使用jQuery的easydrag插件實(shí)現(xiàn)可拖動(dòng)的DIV彈出框
- jQuery實(shí)現(xiàn)簡(jiǎn)單的DIV拖動(dòng)效果
- jQuery實(shí)現(xiàn)div隨意拖動(dòng)的實(shí)例代碼(通用代碼)
- jQuery拖動(dòng)元素并對(duì)元素進(jìn)行重新排序
- jQuery實(shí)現(xiàn)移動(dòng)端滑塊拖動(dòng)選擇數(shù)字效果
- jQuery實(shí)現(xiàn)分隔條左右拖動(dòng)功能
- jQuery拖動(dòng)布局其結(jié)果保存到數(shù)據(jù)庫(kù)
- jquery實(shí)現(xiàn)拖動(dòng)效果(代碼分享)
相關(guān)文章
使用Jquery實(shí)現(xiàn)點(diǎn)擊文字后變成文本框且可修改
使用Jquery實(shí)現(xiàn)點(diǎn)擊文字變?yōu)槲谋究蛐Ч蓪?duì)文本框文字進(jìn)行修改,具體的實(shí)現(xiàn)思路如下,感興趣的朋友可以參考下,希望對(duì)大家有所幫助2013-09-09jquery隱藏標(biāo)簽和顯示標(biāo)簽的實(shí)例
在jquery中我們要實(shí)現(xiàn)點(diǎn)擊按鈕隱藏標(biāo)簽和顯示標(biāo)簽,只要綁定指定button或其它,這樣點(diǎn)擊時(shí)調(diào)用hide或show函數(shù)即可解決,下面看個(gè)實(shí)例就明白了2013-11-11jQuery仿Excel表格編輯功能的實(shí)現(xiàn)代碼
Handsontable 是一個(gè)相當(dāng)給力的 jQuery 插件,它實(shí)現(xiàn)了 HTML 頁(yè)面中的表格編輯功能,并且是仿 Excel 的編輯效果。2013-05-05jquery實(shí)現(xiàn)九宮格大轉(zhuǎn)盤(pán)抽獎(jiǎng)
jQuery九宮格大轉(zhuǎn)盤(pán)抽獎(jiǎng)代碼網(wǎng)頁(yè)特效,點(diǎn)擊抽獎(jiǎng)按鈕開(kāi)始隨機(jī)抽獎(jiǎng)選擇獎(jiǎng)品,可設(shè)置起點(diǎn)位置、獎(jiǎng)品數(shù)量、轉(zhuǎn)動(dòng)次數(shù)、中獎(jiǎng)位置參數(shù)2015-11-11非常漂亮的相冊(cè)集 使用jquery制作相冊(cè)集
這篇文章主要為大家詳細(xì)介紹了使用jquery制作非常漂亮的相冊(cè)集,步驟詳細(xì),細(xì)節(jié)介紹完整,感興趣的小伙伴們可以參考一下2016-04-04以jQuery中$.Deferred對(duì)象為例講解promise對(duì)象是如何處理異步問(wèn)題
Promises是一種令代碼異步行為更加優(yōu)雅的抽象,它很有可能是JavaScript的下一個(gè)編程范式,一個(gè)Promise即表示任務(wù)結(jié)果,無(wú)論該任務(wù)是否完成。本文以jQuery中$.Deferred對(duì)象為例講解promise對(duì)象是如何處理異步問(wèn)題,需要的朋友參考下2015-11-11