主要是運用了原生js封裝了一個cookie,然後使用了三個事件做拖拽,分別是onmousedown,onmousemove,onmouseup,這三個事件其中兩個需要加入事件對象,也就是event,事件對象就是一個不相容的東西,所以需要處理相容性的問題,也就是oEvent = ev || event; 透過事件對象,取得滑鼠點擊螢幕時的那個點,然後減去被拖曳物體距離左邊的一個距離,最終就可以取得到目前點擊位置距離物體的距離。
最後在onmouseup的時候做了一個return false,主要是為了阻止在高版本瀏覽器下選取文字。透過cookie裡面的addCookie方法,把物體拖曳停止時的位置存在了cookie裡面,然後在頁面載入的時候就呼叫getCookie方法,取到物件所在的位置,也就做了一個用cookie存位置的拖曳。
如有下邊的html:
<div id="drag">拖动我</div>
CSS:
#drag{width: 100px; height: 100px; background: red; position: absolute; top: 0; left: 0;cursor:move;}
使用用js實作拖曳的程式碼如下:
function addCookie(name, value, iDay) { var oDate = new Date(); oDate.setDate(oDate.getDate() + iDay); document.cookie = name + '=' + value + '; path=/; expires=' + oDate; } function getCookie(name) { var arr = document.cookie.split('; '); for (var i = 0; i < arr.length; i++) { var arr2 = arr[i].split('='); return (arr2[0] == name) && arr2[1] } return ''; } window.onload = function () { var oDiv = document.getElementById('drag'); drag(oDiv); var move_by = getCookie('move_cood'); if (move_by) { var str = eval('(' + move_by + ')'); oDiv.style.left = str[0] + 'px'; oDiv.style.top = str[1] + 'px'; } function drag(obj) { obj.onmousedown = function (ev) { var oEvent = ev || event; var disX = oEvent.clientX - obj.offsetLeft, disY = oEvent.clientY - obj.offsetTop; document.onmousemove = function (ev) { var oEvent = ev || event; obj.style.left = oEvent.clientX - disX + 'px'; obj.style.top = oEvent.clientY - disY + 'px'; }; document.onmouseup = function () { document.onmousemove = null; document.onmouseup = null; obj.releaseCapture && obj.releaseCapture(); addCookie('move_cood', '[' + obj.offsetLeft + ',' + obj.offsetTop + ']', 10); }; obj.setCapture && obj.setCapture(); return false; }; } };
以上就是原生js配合cookie製作保存路徑的拖曳實現效果,希望對大家的學習有所啟發。