最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js實現(xiàn)回放拖拽軌跡從過程上進行分析

 更新時間:2014年06月26日 10:19:03   投稿:whsnow  
今天的記錄,記錄回放拖拽痕跡,先從過程上進行分析,需要的朋友可以參考下

今天有點小高興,csdn博客瀏覽量過萬了,在過去還從來沒有過這么高的瀏覽量呢,不得不說,太多時候還是有些矯情,可看到這些鼓勵還是忍不住高興啊,至少,這樣讓我有一種行內(nèi)人員的感覺,吾道不孤啊。

閑話不多說,繼續(xù)今天的記錄,記錄回放拖拽痕跡,先從過程上進行分析:

1、要實現(xiàn)回放拖拽痕跡,則必須先有記錄;

2、要記錄拖拽痕跡,則必須要實現(xiàn)拖拽;

這個問題前幾天曾經(jīng)做到過,當(dāng)時實現(xiàn)的也略有瑕疵,但大致的實現(xiàn)方法已經(jīng)了然于胸,所以今天在實現(xiàn)這個問題的時候速度快了不少,著實高興了一番,今天再實現(xiàn)了一遍之后理解上又深了一點,那就今天再來記錄下;

至于記錄拖拽痕跡,這個分析就來長話短說,畢竟做過一次了:

1、確定現(xiàn)在div的位置和狀態(tài),保證absolute才能實現(xiàn)拖動;

2、監(jiān)聽鼠標拖動事件(昨天總結(jié)的幾種鼠標事件);

3、根據(jù)相應(yīng)的鼠標事件,做出相應(yīng)的響應(yīng),在onmousemove拖拽中記錄div存在過的點;

4、監(jiān)聽鼠標彈起事件,來結(jié)束拖拽事件和點的記錄

任然是先來實現(xiàn)下代碼(這里將所有代碼同時列出,后面逐一分析):

html語言:

<div style="width: 50px;height: 50px;background-color: cyan;display: block;position: absolute;" id="showZone"></div>//這個還是那么熟悉啊 
<a href="#" style="position: absolute;margin-top: 100px;color: yellow;background-color: red;">reback</a>//這個是來回放的

javascript部分:

window.onload=function(){ 
var obj=document.getElementById("showZone"); 
var disX=disY=0; 
var dragIf=false; 
var position=[{x:obj.offsetLeft,y:obj.offsetTop}];//這個是實現(xiàn)記錄和回放的關(guān)鍵,其它都是基本元素的獲取 
var oa=document.getElementsByTagName("a")[0]; 

obj.onmousedown=function(event){ 
var event=event||window.event; 
disX=event.clientX-obj.offsetLeft;//鼠標相對于div邊框的距離 
disY=event.clientY-obj.offsetTop; 
dragIf=true;//可以進行拖拽的標志 

position.push({x:obj.offsetLeft,y:obj.offsetTop});//記錄從這時候就開始了 
return false; 
}; 
document.onmousemove=function(event){ 

if(!dragIf)return;//這個判斷極為重要,只有按下的移動才有效 
var event=event||window.event; 
var nowX=event.clientX-disX;//根據(jù)上面記錄的鼠標相對div的距離就知道div相對網(wǎng)頁的距離了吧 
var nowY=event.clientY-disY; 
var maxX=document.documentElement.clientWidth-obj.offsetWidth;//這里是offsetWidth,是div的寬度,不是offsetLeft 
var maxY=document.documentElement.clientHeight-obj.offsetHeight; 
nowX=nowX<0?0:nowX;//這些判定,只是判斷不要出了邊界 
nowY=nowY<0?0:nowY; 
nowX=nowX>maxX?maxX:nowX; 
nowY=nowY>maxY?maxY:nowY; 

obj.style.marginTop=obj.style.marginLeft=0; 
obj.style.left=nowX+"px";//不要忘記+“px”,只有style.left/top是有“px”的 
obj.style.top=nowY+"px"; 
position.push({x:nowX,y:nowY});//不停記錄啊 
obj.innerHTML="X:"+nowX+"Y:"+nowY;//直觀的看到變化 
return false; 
}; 
document.onmouseup=function(){ 
dragIf=false;//不允許再進行拖拽和記錄了 
obj.innerHTML="X:"+obj.offsetLeft+"Y:"+obj.offsetTop; 
}; 
oa.onclick = function (){ 
if (position.length == 1) return;//只有一個的時候,說明并未移動 
var timer = setInterval(function (){ 
var oPos = position.pop(); 
oPos ? (obj.style.left = oPos.x + "px", obj.style.top = oPos.y + "px") : clearInterval(timer);//又被這個寫法驚艷到 
}, 30); 
return false; 
}; 
};

需要注意的關(guān)鍵點,簡要說幾個:

1、var position數(shù)組,點的集合:這個點,是以div的左上角的移動點,也就是說我們記錄的移動軌跡實際上就是div左上角的點的集合,offsetLeft為x坐標,offsetTop為y坐標,這個坐標軸你知道怎么畫不;

2、程序中出現(xiàn)的幾個長度或距離:offsetLeft、clientX、offsetWidth、style.left和document.documentElement.clientWidth等等;

3、push()方法:向數(shù)組末尾添加元素,改變數(shù)組長度,末尾哦;

4、pop()方法:刪除并返回數(shù)組的最后一個元素,關(guān)鍵點有兩個,其一:返回最后一個元素;其二:刪除元素,數(shù)組長度變?。?/p>

這樣我們實現(xiàn)了倒著回放,實現(xiàn)原理就不用多說了吧,如果要是正著回放,我們是不是就要獲取并刪除數(shù)組的第一個值了,哈,試著動手寫寫看吧。

不得不說還是用鼠標拖起來舒服,鍵盤移動太不方便了,用鼠標可以肆無忌憚的拖拽啊.....天已入伏,要熱,今天倒還好....

相關(guān)文章

  • 詳解JavaScript時間處理之幾個月前或幾個月后的指定日期

    詳解JavaScript時間處理之幾個月前或幾個月后的指定日期

    本篇文章主要介紹了JavaScript時間處理之幾個月前或幾個月后的指定日期 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2016-12-12
  • webpack 打包壓縮js和css的方法示例

    webpack 打包壓縮js和css的方法示例

    本篇文章主要介紹了webpack 打包壓縮js和css的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • 前端調(diào)用后端接口時的超時問題解決辦法

    前端調(diào)用后端接口時的超時問題解決辦法

    這篇文章主要給大家介紹了關(guān)于如何解決前端調(diào)用后端接口時的超時問題,還詳細介紹了在Vue項目中配置axios的全局超時時間、使用遞歸和Promise.race()處理異步請求超時的最佳實踐,需要的朋友可以參考下
    2024-12-12
  • JavaScript設(shè)計模式之職責(zé)鏈模式詳解

    JavaScript設(shè)計模式之職責(zé)鏈模式詳解

    職責(zé)鏈模式的定義是:使多個對象都有機會處理請求,從而避免請求的發(fā)送者和接收者之間的耦合關(guān)系,將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為止
    2022-08-08
  • 前端html2canvas生成截圖實現(xiàn)步驟與踩坑記錄

    前端html2canvas生成截圖實現(xiàn)步驟與踩坑記錄

    這篇文章主要介紹了前端html2canvas生成截圖實現(xiàn)步驟與踩坑的相關(guān)資料,主要步驟包括使用html2canvas生成截圖以及處理圖片跨域和CSS樣式丟失問題,可選方案包括轉(zhuǎn)換圖片為base64編碼和使用domtoimage插件,需要的朋友可以參考下
    2024-09-09
  • JAVASCRIPT style 中visibility和display之間的區(qū)別

    JAVASCRIPT style 中visibility和display之間的區(qū)別

    visibility屬性用來確定元素是顯示還是隱藏的,這用visibility="visible|hidden"來表示(visible表示顯示,hidden表示隱藏)。
    2010-01-01
  • javascript圖片預(yù)加載實例分析

    javascript圖片預(yù)加載實例分析

    這篇文章主要介紹了javascript圖片預(yù)加載的方法,實例分析了javascript實現(xiàn)圖片預(yù)加載的方法與相關(guān)注意事項,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • JavaScript實現(xiàn)字符串轉(zhuǎn)數(shù)組的6種方法總結(jié)

    JavaScript實現(xiàn)字符串轉(zhuǎn)數(shù)組的6種方法總結(jié)

    數(shù)組是?JavaScript?中最強大的數(shù)據(jù)結(jié)構(gòu),我們常常通過將字符串轉(zhuǎn)換為數(shù)組來解決許多算法。本文為大家總結(jié)了6個JS字符串轉(zhuǎn)數(shù)組的方法,希望對你有所幫助
    2022-09-09
  • JS觸發(fā)服務(wù)器控件的單擊事件(詳解)

    JS觸發(fā)服務(wù)器控件的單擊事件(詳解)

    下面小編就為大家?guī)硪黄狫S觸發(fā)服務(wù)器控件的單擊事件(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • 淺析JavaScript定時器setTimeout的時延問題

    淺析JavaScript定時器setTimeout的時延問題

    這篇文章主要為大家詳細介紹了JavaScript中定時器setTimeout有最小時延的相關(guān)知識,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11

最新評論

甘德县| 花莲市| 福贡县| 沾化县| 五家渠市| 赣州市| 翁源县| 改则县| 宁晋县| 奉化市| 广水市| 繁昌县| 启东市| 临夏县| 香格里拉县| 灵山县| 淮阳县| 井冈山市| 潍坊市| 赣州市| 普兰店市| 甘泉县| 宾阳县| 龙口市| 扶风县| 全州县| 平山县| 昭通市| 双峰县| 分宜县| 黑水县| 会昌县| 张家口市| 桃江县| 惠安县| 固安县| 招远市| 申扎县| 景谷| 崇州市| 大理市|