国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript實(shí)現(xiàn)拖拽網(wǎng)頁內(nèi)元素的方法

2019-11-20 12:39:46
字體:
供稿:網(wǎng)友

本文實(shí)例講述了JavaScript實(shí)現(xiàn)拖拽網(wǎng)頁內(nèi)元素的方法。分享給大家供大家參考。具體如下:

這段代碼詳細(xì)講述了JS拖拽的原理和方法,值得學(xué)習(xí)和借鑒。

/*** 跨平臺的事件監(jiān)聽函數(shù)* @param {Node} node 需要監(jiān)聽事件的DOM節(jié)點(diǎn)* @param {String} eventType 需要監(jiān)聽的事件類型* @param {Function} callback 事件監(jiān)聽回調(diào)函數(shù)* @type Function 返回值為函數(shù)類型* @return 返回監(jiān)聽回調(diào)函數(shù)的引用,用于釋放監(jiān)聽*/function bindEvent(node, eventType, callback) { if (node.attachEvent) {  if (eventType.indexOf('on')) { eventType = 'on' + eventType;}  node.attachEvent(eventType, callback); } else {  if (!eventType.indexOf('on'))   eventType = eventType.substring(2, eventType.length);  node.addEventListener(eventType, callback, false); } return callback;}/*** 跨平臺的事件監(jiān)聽卸載函數(shù)* @param {Node} node 需要卸載監(jiān)聽事件的DOM節(jié)點(diǎn)* @param {String} eventType 需要卸載監(jiān)聽的事件類型* @param {Function} callback 卸載事件監(jiān)聽回調(diào)函數(shù)*/function removeEvent(node, eventType, callback) { if (node.detachEvent) {  if (eventType.indexOf('on')) { eventType = 'on' + eventType;}  node.detachEvent(eventType, callback); } else {  if (!eventType.indexOf('on'))   eventType = eventType.substring(2, eventType.length);  node.removeEventListener(eventType, callback, false); }}/*** 兼容不同定位方式的通用拖動接口* @param {Node} dragger 需要被拖動的元素*///必須告訴系統(tǒng),哪些元素是可以進(jìn)行交互,而哪些是不行function canDrag(dragger) { var drag = bindEvent(dragger,'onmousedown',function(e){  //兼容事件對象  e = e || event;  //兼容坐標(biāo)屬性  var pageX = e.clientX || e.pageX;  var pageY = e.clientY || e.pageY;  //兼容樣式對象  var style = dragger.currentStyle || window.getComputedStyle(dragger,null);  //當(dāng)沒有設(shè)置left和top屬性時,IE下默認(rèn)值為auto  var offX = parseInt(style.left) || 0;  var offY = parseInt(style.top) || 0;  //獲取鼠標(biāo)相對于元素的間距  var offXL = pageX - offX;  var offYL = pageY - offY;  //為dragger增加onDrag屬性,用來存儲拖動事件  if (!dragger.onDrag) {   //監(jiān)聽拖動事件   dragger.onDrag = bindEvent(document,'onmousemove',function(e){    e = e || event;    var x = e.clientX || e.pageX;    var y = e.clientY || e.pageY    //設(shè)置X坐標(biāo)    dragger.style.left = x - offXL + 'px';    //設(shè)置Y坐標(biāo)    dragger.style.top = y - offYL + 'px';   });   //監(jiān)聽拖動結(jié)束事件   dragger.onDragEnd = bindEvent(document,'onmouseup',function(e){    //釋放前讀取事件對象    var x = e.clientX || e.pageX;    var y = e.clientY || e.pageY    //釋放拖動監(jiān)聽和結(jié)束監(jiān)聽    removeEvent(document, 'onmousemove', dragger.onDrag);    removeEvent(document, 'onmouseup', dragger.onDragEnd);    try {     //刪除拖動時所用的屬性,兼容FF使用     delete dragger.onDrag;     delete dragger.onDragEnd;    } catch (e) {     //刪除拖動時所用的屬性,兼容IE6使用     dragger.removeAttribute('onDrag');     dragger.removeAttribute('onDragEnd');    }   });  } }); return function() {  //返回一個可以取消拖動功能的函數(shù)引用  //釋放拖動監(jiān)聽和結(jié)束監(jiān)聽  removeEvent(document, 'onmousemove', dragger.onDrag);  removeEvent(document, 'onmouseup', dragger.onDragEnd);  try {   //刪除拖動時所用的屬性,兼容FF使用   delete dragger.onDrag;   delete dragger.onDragEnd;  } catch (e) {   //刪除拖動時所用的屬性,兼容IE6使用   dragger.removeAttribute('onDrag');   dragger.removeAttribute('onDragEnd');  } }}

希望本文所述對大家的javascript程序設(shè)計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 桂阳县| 英吉沙县| 营山县| 四子王旗| 泗阳县| 东宁县| 瑞金市| 榆社县| 宣城市| 望江县| 阳江市| 韶山市| 屏南县| 河北区| 文昌市| 海林市| 和平区| 南岸区| 冷水江市| 金华市| 沧源| 泸溪县| 常宁市| 伊川县| 重庆市| 华坪县| 屏东县| 天气| 蒙自县| 望江县| 抚宁县| 五华县| 恩施市| 吉木乃县| 盘山县| 罗平县| 长岭县| 杭州市| 磐石市| 星子县| 元朗区|