JavaScript實(shí)現(xiàn)九宮格拖拽效果
本文實(shí)例為大家分享了JavaScript實(shí)現(xiàn)九宮格拖拽效果的具體代碼,供大家參考,具體內(nèi)容如下
關(guān)于一些拼圖游戲什么的,見(jiàn)人家效果做的不錯(cuò),參考下別人寫(xiě)的代碼,我也嘗試著做了個(gè)。
<!DOCTYPE html> <html> ?? ?<head> ?? ??? ?<meta charset="UTF-8"> ?? ??? ?<title></title> ?? ??? ?<style type="text/css"> ?? ??? ??? ?body{ ?? ??? ??? ??? ?margin: 0; ?? ??? ??? ??? ?padding: 0; ?? ??? ??? ?} ?? ??? ??? ?#wrap{ ?? ??? ??? ??? ?position: relative; ?? ??? ??? ?} ?? ??? ??? ?#wrap div{ ?? ??? ??? ??? ?position: absolute; ?? ??? ??? ??? ?width: 100px; ?? ??? ??? ??? ?height: 100px; ?? ??? ??? ??? ?font-size: 50px; ?? ??? ??? ??? ?text-align: center; ?? ??? ??? ??? ?line-height: 100px; ?? ??? ??? ??? ?border-radius: 10px; ?? ??? ??? ?} ?? ??? ?</style> ?? ?</head> ?? ?<body> ?? ??? ?<div id="wrap"></div> ?? ??? ?<script type="text/javascript"> ?? ??? ??? ?//生成結(jié)構(gòu) ?? ??? ??? ?var oWrap = document.getElementById("wrap"); ?? ??? ??? ?var mt = ml = 10; ?? ??? ??? ?for(var i = 0; i < 3; i++){ ?? ??? ??? ??? ?for(var j = 0; j < 3; j++){ ?? ??? ??? ??? ??? ?var oDiv = document.createElement("div"); ?? ??? ??? ??? ??? ?oWrap.appendChild(oDiv); ?? ??? ??? ??? ??? ?oDiv.style.top = i*(oDiv.offsetHeight + mt) + "px"; ?? ??? ??? ??? ??? ?oDiv.style.left = j*(oDiv.offsetWidth + ml) + "px"; ?? ??? ??? ??? ??? ?oDiv.style.backgroundColor = "rgb("+Math.floor(Math.random()*256)+","+Math.floor(Math.random()*256)+","+Math.floor(Math.random()*256)+")" ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ? ?? ??? ??? ?var arr = "ABCDEFGHI"; ?? ??? ??? ? ?? ??? ??? ?var aItems = oWrap.children; ?? ??? ??? ?var len = aItems.length; ?? ??? ??? ? ?? ??? ??? ?for(var i = 0; i < aItems.length; i++){ ?? ??? ??? ??? ?aItems[i].innerHTML = arr[i]; ?? ??? ??? ?} ?? ??? ??? ?//拖拽及交換位置 ?? ??? ??? ? ?? ??? ??? ?for(var i = 0; i < aItems.length; i++){ ?? ??? ??? ??? ?aItems[i].onmousedown = function(e){ ?? ??? ??? ??? ??? ?var evt = e || event; ?? ??? ??? ??? ??? ?var x = evt.offsetX; ?? ??? ??? ??? ??? ?var y = evt.offsetY; ?? ??? ??? ??? ??? ?/*var x = evt.clientX - this.offsetLeft - oWrap.offsetLeft; ?? ??? ??? ??? ??? ?var y = evt.clientY - this.offsetTop - oWrap.offsetTop;*/ ?? ??? ??? ??? ??? ?var _this = this; ?? ??? ??? ??? ??? ? ?? ??? ??? ??? ??? ?var cloneNode = this.cloneNode(); ?? ??? ??? ??? ??? ?cloneNode.style.border = '1px dashed #cecece'; ?? ??? ??? ??? ??? ?this.style.zIndex = 1; ?? ??? ??? ??? ??? ?oWrap.replaceChild(cloneNode,this); ?? ??? ??? ??? ??? ?oWrap.appendChild(this); ?? ??? ??? ??? ??? ? ?? ??? ??? ??? ??? ?document.onmousemove = function(e){ ?? ??? ??? ??? ??? ??? ?var evt = e || event; ?? ??? ??? ??? ??? ??? ?var _left = evt.clientX - x - oWrap.offsetLeft; ?? ??? ??? ??? ??? ??? ?var _top = evt.clientY - y - oWrap.offsetTop; ?? ??? ??? ??? ??? ??? ?_this.style.left = _left + "px"; ?? ??? ??? ??? ??? ??? ?_this.style.top = _top + "px"; ?? ??? ??? ??? ??? ??? ? ?? ??? ??? ??? ??? ??? ?return false; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ? ?? ??? ??? ??? ??? ?document.onmouseup = function(){ ?? ??? ??? ??? ??? ??? ? ?? ??? ??? ??? ??? ??? ?//交換位置 ?? ??? ??? ??? ??? ??? ?var disArr = []; ?? ??? ??? ??? ??? ??? ?var newArr = []; ?? ??? ??? ??? ??? ??? ?console.log(aItems.length); ?? ??? ??? ??? ??? ??? ?for(var i = 0; i < len; i++){ ?? ??? ??? ??? ??? ??? ??? ?var disX = _this.offsetLeft - aItems[i].offsetLeft; ?? ??? ??? ??? ??? ??? ??? ?var disY = _this.offsetTop - aItems[i].offsetTop; ?? ??? ??? ??? ??? ??? ??? ?var dis = Math.sqrt(Math.pow(disX,2)+Math.pow(disY,2)); ?? ??? ??? ??? ??? ??? ??? ?disArr.push(dis); ?? ??? ??? ??? ??? ??? ??? ?newArr.push(dis); ?? ??? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ??? ?disArr.sort(function(a,b){ ?? ??? ??? ??? ??? ??? ??? ?return a-b; ?? ??? ??? ??? ??? ??? ?}) ?? ??? ??? ??? ??? ??? ?var minIndex = newArr.indexOf(disArr[0]); ?? ??? ??? ??? ??? ??? ? ?? ??? ??? ??? ??? ??? ?_this.style.left = aItems[minIndex].style.left; ?? ??? ??? ??? ??? ??? ?_this.style.top = aItems[minIndex].style.top; ?? ??? ??? ??? ??? ??? ?aItems[minIndex].style.left = cloneNode.style.left; ?? ??? ??? ??? ??? ??? ?aItems[minIndex].style.top = cloneNode.style.top; ?? ??? ??? ??? ??? ??? ?oWrap.removeChild(cloneNode); ?? ??? ??? ??? ??? ??? ?document.onmousemove = null; ?? ??? ??? ??? ??? ??? ?document.onmouseup = null; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?/*var arr = [45,32,11,90]; ?? ??? ??? ?var minVal = Math.min.apply(null,arr); ?? ??? ??? ?var minIndex = arr.indexOf(minVal); ?? ??? ??? ?console.log(minVal,arr,minIndex);*/ ?? ??? ?</script> ?? ?</body> </html>
這是效果圖
雖說(shuō)實(shí)現(xiàn)了效果,但我寫(xiě)的還是不太嚴(yán)謹(jǐn),還有諸多bug,比如上邊做邊沒(méi)距離,實(shí)際寫(xiě)的話(huà)還要加上這個(gè)距離,即使距離為0,還有就是我發(fā)現(xiàn)拖拽的時(shí)候,如果使用qq截圖的話(huà),克隆的那個(gè)小方塊沒(méi)辦法消失,只得重新刷新頁(yè)面,有沒(méi)有大佬解決下。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 原生js實(shí)現(xiàn)九宮格拖拽換位
- JQuery Dialog(JS 模態(tài)窗口,可拖拽的DIV)
- Sortable.js拖拽排序使用方法解析
- js實(shí)現(xiàn)拖拽效果
- javascript實(shí)現(xiàn)移動(dòng)端上的觸屏拖拽功能
- 使用js實(shí)現(xiàn)的簡(jiǎn)單拖拽效果
- JS實(shí)現(xiàn)的文件拖拽上傳功能示例
- JS實(shí)現(xiàn)漂亮的窗口拖拽效果(可改變大小、最大化、最小化、關(guān)閉)
- 使用javaScript實(shí)現(xiàn)鼠標(biāo)拖拽事件
- JavaScript實(shí)現(xiàn)圖片的放大縮小及拖拽功能示例
相關(guān)文章
js實(shí)現(xiàn)帶緩沖效果的仿QQ面板折疊菜單代碼
這篇文章主要介紹了js實(shí)現(xiàn)帶緩沖效果的仿QQ面板折疊菜單代碼,通過(guò)JavaScript定時(shí)函數(shù)遞歸調(diào)用實(shí)現(xiàn)折疊菜單的緩沖效果,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09關(guān)于在Typescript中做錯(cuò)誤處理的方式詳解
錯(cuò)誤處理是軟件工程重要的一部分,如果處理得當(dāng),它可以為你節(jié)省數(shù)小時(shí)的調(diào)試和故障排除時(shí)間,我發(fā)現(xiàn)了與錯(cuò)誤處理相關(guān)的三大疑難雜癥:TypeScript的錯(cuò)誤類(lèi)型,變量范圍和嵌套,讓我們逐一深入了解它們帶來(lái)的撓頭問(wèn)題,感興趣的朋友可以參考下2023-09-09詳解js獲取video任意時(shí)間的畫(huà)面截圖
這篇文章主要介紹了js獲取video任意時(shí)間的畫(huà)面截圖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04《JavaScript高級(jí)程序設(shè)計(jì)》閱讀筆記(二) ECMAScript中的原始類(lèi)型
ECMAScript有5種原始類(lèi)型(primitive type),即Undefined、Null、Boolean、Number和String。ECMAScript提供了typeof來(lái)判斷值的類(lèi)型2012-02-02如何利用JS實(shí)現(xiàn)時(shí)間軸動(dòng)畫(huà)效果
時(shí)間軸動(dòng)畫(huà)和幀式動(dòng)畫(huà)有很大不同,但相比之下時(shí)間軸方式來(lái)的更直觀(guān)和簡(jiǎn)便,下面這篇文章主要給大家介紹了關(guān)于如何利用JS實(shí)現(xiàn)時(shí)間軸動(dòng)畫(huà)效果的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06JavaScript中 this 指向問(wèn)題深度解析
這篇文章主要介紹了JavaScript中 this 指向問(wèn)題深度解析,JavaScript 中的 this 指向問(wèn)題有很多文章在解釋?zhuān)匀挥泻芏嗳藛?wèn),本文給大家深度解析,需要的朋友可以參考下2017-02-02仿iPhone通訊錄制作小程序自定義選擇組件的實(shí)現(xiàn)
這篇文章主要介紹了仿iPhone通訊錄制作小程序自定義選擇組件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05