亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

javascript實現拖動元素交換位置

2019-11-20 11:08:12
字體:
來源:轉載
供稿:網友

本文實例講述了javascript實現拖動元素交換位置的代碼。分享給大家供大家參考。具體如下:

實現目標:可拖動元素拖動到另外一個元素位置的時候,互相交換位置。

啟發來源:最初形式是網上看到的一個拼圖小游戲。

運行效果截圖如下:

具體代碼如下:

代碼:

body,ul,li{margin:0;padding:0;}ul{list-style: none;}body{font:13px/1.5 Tahoma;}#box{position:relative;width:435px;height:580px;margin:10px auto;padding: 10px 5px 10px 10px;border: 1px solid #ccc;}#box li{float:left;width:80px;height:188px;overflow:hidden;background: #ccc;border: 1px solid #999;}#box li.hig{width:78px;height:186px;overflow:hidden;border:2px dashed blue;} 
<ul id="box"></ul>

js代碼:

var zIndex = 1;
window.onload = function() { var oBox = document.getElementById("box"); var aLi = oBox.getElementsByTagName("li"); var aPos = []; var aData = []; for (i = 0; i < 15; i++)aData.push(i+1); //插入結構 var oFragment = document.createDocumentFragment(); for (i = 0; i < aData.length; i++) { var oLi = document.createElement("li"); oFragment.appendChild(oLi) } oBox.appendChild(oFragment); //布局轉換 for (i = 0; i < aLi.length; i++) { aLi[i].index = i; aLi[i].style.top = aLi[i].offsetTop + "px"; aLi[i].style.left = aLi[i].offsetLeft + "px"; aLi[i].style.margin = "0 5px 5px 0"; aPos.push({ "left": aLi[i].offsetLeft, "top": aLi[i].offsetTop }) } for (i = 0; i < aLi.length; i++) { aLi[i].style.position = "absolute"; drag(aLi[i]) } //拖拽函數 function drag(obj, handle) { var handle = handle || obj; handle.style.cursor = "move"; handle.onmousedown = function(event) { var event = event || window.event; var disX = event.clientX - this.offsetLeft; var disY = event.clientY - this.offsetTop; var oNear = null; obj.style.zIndex = zIndex++; document.onmousemove = function(event) { var event = event || window.event; var iL = event.clientX - disX; var iT = event.clientY - disY; var maxL = obj.parentNode.clientWidth - obj.offsetWidth; var maxT = obj.parentNode.clientHeight - obj.offsetHeight; iL < 0 && (iL = 0); iT < 0 && (iT = 0); iL > maxL && (iL = maxL); iT > maxT && (iT = maxT); obj.style.left = iL + "px"; obj.style.top = iT + "px"; for (i = 0; i < aLi.length; i++) aLi[i].className = ""; oNear = findNearest(obj); oNear && (oNear.className = "hig"); return false }; document.onmouseup = function() { document.onmousemove = null; document.onmouseup = null; if (oNear) { var tIndex = obj.index; obj.index = oNear.index; oNear.index = tIndex; startMove(obj, aPos[obj.index]); startMove(oNear, aPos[oNear.index], function() { }); oNear.className = ""; } else { startMove(obj, aPos[obj.index]) } handle.releaseCapture && handle.releaseCapture() }; this.setCapture && this.setCapture(); return false } } //找出相遇點中最近的元素 function findNearest(obj) { var filterLi = []; var aDistance = []; for (i = 0; i < aLi.length; i++) aLi[i] != obj && (isButt(obj, aLi[i]) && (aDistance.push(getDistance(obj, aLi[i])), filterLi.push(aLi[i]))); var minNum = Number.MAX_VALUE; var minLi = null; for (i = 0; i < aDistance.length; i++) aDistance[i] < minNum && (minNum = aDistance[i], minLi = filterLi[i]); return minLi }};//求兩點之間的距離function getDistance(obj1, obj2) { var a = (obj1.offsetLeft + obj1.offsetWidth / 2) - (obj2.offsetLeft + obj2.offsetWidth / 2); var b = (obj1.offsetTop + obj1.offsetHeight / 2) - (obj2.offsetTop + obj2.offsetHeight / 2); return Math.sqrt(a * a + b * b)}//碰撞檢測function isButt(obj1, obj2) { var l1 = obj1.offsetLeft; var t1 = obj1.offsetTop; var r1 = obj1.offsetLeft + obj1.offsetWidth; var b1 = obj1.offsetTop + obj1.offsetHeight; var l2 = obj2.offsetLeft; var t2 = obj2.offsetTop; var r2 = obj2.offsetLeft + obj2.offsetWidth; var b2 = obj2.offsetTop + obj2.offsetHeight; return !(r1 < l2 || b1 < t2 || r2 < l1 || b2 < t1)}//獲取最終樣式function getStyle(obj, attr) { return parseFloat(obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj, null)[attr])}//運動框架function startMove(obj, pos, onEnd) { clearInterval(obj.timer); obj.timer = setInterval(function() { doMove(obj, pos, onEnd) }, 30)}function doMove(obj, pos, onEnd) { var iCurL = getStyle(obj, "left"); var iCurT = getStyle(obj, "top"); var iSpeedL = (pos.left - iCurL) / 5; var iSpeedT = (pos.top - iCurT) / 5; iSpeedL = iSpeedL > 0 ? Math.ceil(iSpeedL) : Math.floor(iSpeedL); iSpeedT = iSpeedT > 0 ? Math.ceil(iSpeedT) : Math.floor(iSpeedT); if (pos.left == iCurL && pos.top == iCurT) { clearInterval(obj.timer); onEnd && onEnd() } else { obj.style.left = iCurL + iSpeedL + "px"; obj.style.top = iCurT + iSpeedT + "px"; }}

 

以上就是javascript實現拖動元素交換位置的全部代碼,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久影院资源网| 国产精品户外野外| 国产午夜精品美女视频明星a级| 亚洲色图欧美制服丝袜另类第一页| 欧美午夜精品伦理| 欧美精品福利视频| 91地址最新发布| 国产va免费精品高清在线观看| 亚洲精品丝袜日韩| 国产精品18久久久久久首页狼| 国产97在线播放| 国产精品1区2区在线观看| 亚洲福利视频免费观看| 日本精品在线视频| 国产一区二区在线播放| 国产视频精品久久久| 色悠悠久久久久| 国产91成人video| 91美女片黄在线观看游戏| 久久久视频免费观看| 亚洲精品视频网上网址在线观看| 成人网在线免费观看| 久久久精品电影| 欧美黑人xxxx| 在线视频免费一区二区| 在线中文字幕日韩| 亚洲激情在线观看| 亚洲天堂免费观看| 亚洲精品国产精品久久清纯直播| 国产精品久久久久av免费| 亚洲自拍小视频免费观看| 国产成人av在线| 国产精品自拍小视频| 亚洲美女中文字幕| 久久中文字幕国产| 久久久亚洲欧洲日产国码aⅴ| 亲爱的老师9免费观看全集电视剧| 国产精品久久久久久久久久ktv| 亚洲已满18点击进入在线看片| 欧美亚洲一区在线| 日韩中文字幕国产精品| 日韩精品久久久久久福利| 国产亚洲精品久久久优势| 亚洲精品国产美女| 亚洲精品自在久久| 韩剧1988免费观看全集| 97视频在线观看视频免费视频| 91精品视频网站| 26uuu亚洲伊人春色| 国产精品女主播视频| 欧美—级高清免费播放| 久久精品国产亚洲一区二区| 日韩美女视频中文字幕| 在线播放日韩精品| 亚洲精品久久久久久下一站| 国产精品久久久久久久天堂| 亚洲国产精品va在线| 日韩精品一区二区三区第95| 亚洲最大av在线| 麻豆精品精华液| 亚洲欧美制服第一页| 亚洲欧美制服第一页| 亚洲毛片在线观看| 欧美乱大交xxxxx另类电影| 欧美一区二区三区精品电影| 中文字幕亚洲国产| 亚洲黄色免费三级| 欧美肥老太性生活视频| 青草成人免费视频| 日本中文字幕不卡免费| 精品国产一区二区三区久久久| 国产91在线播放精品91| 久热国产精品视频| 久久综合久久八八| 亚洲色图欧美制服丝袜另类第一页| 欧美日韩性视频在线| 日韩欧美主播在线| 国产一区二区久久精品| 亚洲国产日韩欧美综合久久| 亚洲jizzjizz日本少妇| 久久精品视频免费播放| 亚洲国产高潮在线观看| 欧美成人国产va精品日本一级| 96精品久久久久中文字幕| 久久夜精品香蕉| 另类少妇人与禽zozz0性伦| 亚洲美女又黄又爽在线观看| 日韩av在线网| xxx一区二区| 日韩一区二区三区国产| 日韩欧美亚洲国产一区| 欧美一级在线播放| 久久亚洲欧美日韩精品专区| 91高清视频在线免费观看| 国产69精品久久久久久| 亚洲美女黄色片| 国产精品9999| 欧美激情一区二区三区久久久| 欧美性少妇18aaaa视频| 国产精品国产亚洲伊人久久| 久久久久久久久久av| 992tv在线成人免费观看| 日韩成人在线免费观看| 亚洲国产另类 国产精品国产免费| 久久精品视频va| 一本色道久久88综合亚洲精品ⅰ| 91精品国产免费久久久久久| 亚洲精品国偷自产在线99热| 中文字幕亚洲欧美日韩在线不卡| 欧美成人国产va精品日本一级| 亚洲欧美日本另类| 91久久精品久久国产性色也91| 人人澡人人澡人人看欧美| 欧美国产日韩免费| 亚洲第一色中文字幕| 最新亚洲国产精品| 日韩在线观看精品| 国产欧美精品在线播放| yellow中文字幕久久| 国产999精品久久久影片官网| 亚洲欧美日韩成人| 欧美精品电影免费在线观看| 性欧美办公室18xxxxhd| 中文字幕精品久久| 久久免费视频网站| 疯狂做受xxxx欧美肥白少妇| 国产精品久久久久久久一区探花| 欧美—级高清免费播放| 国产视频精品va久久久久久| 国产91九色视频| 亚洲一区二区三| 亚洲第一区中文99精品| 亚洲成人精品视频在线观看| 最好看的2019的中文字幕视频| 日韩av在线免播放器| 夜夜嗨av一区二区三区四区| 国外成人在线播放| 91精品在线播放| 性金发美女69hd大尺寸| 久久久精品电影| 久久久国产精品一区| 国产日韩欧美成人| 欧美午夜www高清视频| 亚洲free嫩bbb| 亚洲人成网站色ww在线| 日韩专区在线观看| 久久精品视频在线观看| 亚洲激情小视频| 亚洲激情久久久| 久久视频这里只有精品| 国产精品久久久久高潮| 国产精品日韩久久久久| 狠狠躁夜夜躁人人爽超碰91| 国产suv精品一区二区| 美女扒开尿口让男人操亚洲视频网站| 国产一区二区欧美日韩| 亚洲视频网站在线观看| 亚洲天堂av在线播放| 亚洲欧美日韩天堂| 国产欧美精品日韩精品| 78色国产精品| 久久久国产精品x99av| 国产精品video| 97香蕉久久夜色精品国产|