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

首頁 > 編程 > JavaScript > 正文

JS基于面向對象實現的拖拽庫實例

2019-11-20 11:31:36
字體:
來源:轉載
供稿:網友

本文實例講述了JS基于面向對象實現的拖拽庫。分享給大家供大家參考。具體如下:

這是一個面向對象的JS拖拽庫,可設置水平鎖定、垂直鎖定、鎖定位置、鎖定范圍等,設定這些范圍后,只能在設定的模式下拖動,我覺得這是個挺不錯的拖拽實例。

運行效果截圖如下:

在線演示地址如下:

http://demo.VeVB.COm/js/2015/js-mxdx-draw-plug-codes/

具體代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>拖拽庫</title><style type="text/css"> div,h2,p{margin:0;padding:0;}body{font:14px/1.5 arial;}#box{width:100px;height:100px;background:#fef4eb;padding:5px;margin:50px;border:1px solid #f60;}#box .title{height:25px;background:#f60;}#tool{margin-bottom:10px;}</style><script type="text/javascript"> function Drag(){ //初始化 this.initialize.apply(this, arguments)}Drag.prototype = { //初始化 initialize : function (drag, options) {  this.drag = this.$(drag);  this._x = this._y = 0;  this._moveDrag = this.bind(this, this.moveDrag);  this._stopDrag = this.bind(this, this.stopDrag);    this.setOptions(options);    this.handle = this.$(this.options.handle);  this.maxContainer = this.$(this.options.maxContainer);    this.maxTop = Math.max(this.maxContainer.clientHeight, this.maxContainer.scrollHeight) - this.drag.offsetHeight;  this.maxLeft = Math.max(this.maxContainer.clientWidth, this.maxContainer.scrollWidth) - this.drag.offsetWidth;  this.limit = this.options.limit;  this.lockX = this.options.lockX;  this.lockY = this.options.lockY;  this.lock = this.options.lock;  this.onStart = this.options.onStart;  this.onMove = this.options.onMove;  this.onStop = this.options.onStop;  this.handle.style.cursor = "move";  this.changeLayout();  this.addHandler(this.handle, "mousedown", this.bind(this, this.startDrag)) }, changeLayout : function () {  this.drag.style.top = this.drag.offsetTop + "px";  this.drag.style.left = this.drag.offsetLeft + "px";  this.drag.style.position = "absolute";  this.drag.style.margin = "0" }, startDrag : function (event) {    var event = event || window.event;  this._x = event.clientX - this.drag.offsetLeft;  this._y = event.clientY - this.drag.offsetTop;  this.addHandler(document, "mousemove", this._moveDrag);  this.addHandler(document, "mouseup", this._stopDrag);  event.preventDefault && event.preventDefault();  this.handle.setCapture && this.handle.setCapture();  this.onStart() }, moveDrag : function (event) {  var event = event || window.event;  var iTop = event.clientY - this._y;  var iLeft = event.clientX - this._x;  if (this.lock) return;  this.limit && (iTop < 0 && (iTop = 0), iLeft < 0 && (iLeft = 0), iTop > this.maxTop && (iTop = this.maxTop), iLeft > this.maxLeft && (iLeft = this.maxLeft));  this.lockY || (this.drag.style.top = iTop + "px");  this.lockX || (this.drag.style.left = iLeft + "px");  event.preventDefault && event.preventDefault();  this.onMove() }, stopDrag : function () {  this.removeHandler(document, "mousemove", this._moveDrag);  this.removeHandler(document, "mouseup", this._stopDrag);  this.handle.releaseCapture && this.handle.releaseCapture();  this.onStop() }, //參數設置 setOptions : function (options) {  this.options =  {   handle:   this.drag, //事件對象   limit:   true, //鎖定范圍   lock:   false, //鎖定位置   lockX:   false, //鎖定水平位置   lockY:   false, //鎖定垂直位置   maxContainer: document.documentElement || document.body, //指定限制容器   onStart:  function () {}, //開始時回調函數   onMove:   function () {}, //拖拽時回調函數   onStop:   function () {} //停止時回調函數  };  for (var p in options) this.options[p] = options[p] }, //獲取id $ : function (id) {  return typeof id === "string" ? document.getElementById(id) : id }, //添加綁定事件 addHandler : function (oElement, sEventType, fnHandler) {  return oElement.addEventListener ? oElement.addEventListener(sEventType, fnHandler, false) : oElement.attachEvent("on" + sEventType, fnHandler) }, //刪除綁定事件 removeHandler : function (oElement, sEventType, fnHandler) {  return oElement.removeEventListener ? oElement.removeEventListener(sEventType, fnHandler, false) : oElement.detachEvent("on" + sEventType, fnHandler) }, //綁定事件到對象 bind : function (object, fnHandler) {  return function ()  {   return fnHandler.apply(object, arguments)  } }};//應用window.onload = function (){ var oBox = document.getElementById("box"); var oTitle = oBox.getElementsByTagName("h2")[0]; var oSpan = document.getElementsByTagName("span")[0]; var oDrag = new Drag(oBox, {handle:oTitle, limit:false}); var aInput = document.getElementsByTagName("input"); //鎖定范圍接口 aInput[0].onclick = function () {  oDrag.limit = !oDrag.limit;  this.value = oDrag.limit ? "取消鎖定范圍" : "鎖定范圍" };  //水平鎖定接口 aInput[1].onclick = function () {  oDrag.lockX = !oDrag.lockX;  this.value = oDrag.lockX ? "取消水平鎖定" : "水平鎖定" };  //垂直鎖定接口 aInput[2].onclick = function () {  oDrag.lockY = !oDrag.lockY;  this.value = oDrag.lockY ? "取消垂直鎖定" : "垂直鎖定" };  //鎖定位置接口 aInput[3].onclick = function () {  oDrag.lock = !oDrag.lock;  this.value = oDrag.lock ? "取消鎖定位置" : "鎖定位置" };  //開始拖拽時方法 oDrag.onStart = function () {  oSpan.innerHTML = "開始拖拽" };  //開始拖拽時方法 oDrag.onMove = function () {  oSpan.innerHTML = "left:" + this.drag.offsetLeft + ", top:" + this.drag.offsetTop }; //開始拖拽時方法 oDrag.onStop = function () {  oSpan.innerHTML = "結束拖拽" };};</script></head><body><div id="tool"><input type="button" value="鎖定范圍" /> <input type="button" value="水平鎖定" /> <input type="button" value="垂直鎖定" /> <input type="button" value="鎖定位置" /></div><p>拖放狀態:<span>未開始</span></p><div id="box"> <h2 class="title"></h2></div></body></html>

希望本文所述對大家的JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩在线视频一区二区| 欧美激情亚洲激情| 性色av一区二区三区在线观看| 欧美成人免费全部观看天天性色| 日本中文字幕久久看| 精品偷拍一区二区三区在线看| 日韩69视频在线观看| 在线观看欧美日韩| 国产日韩综合一区二区性色av| 午夜精品久久久久久久99热浪潮| 欧美日韩ab片| 97香蕉久久夜色精品国产| 亚洲精品98久久久久久中文字幕| 热久久这里只有| 精品欧美激情精品一区| 国产精品jizz在线观看麻豆| 亚洲国产三级网| 国产伦精品一区二区三区精品视频| 亚洲精品久久久久中文字幕二区| 精品中文字幕乱| 国产精品久久久久不卡| 国产va免费精品高清在线| 欧美国产日韩一区二区三区| 亚洲高清免费观看高清完整版| 最近2019中文字幕第三页视频| 91在线国产电影| 国产精品热视频| 黄色一区二区三区| 欧美午夜www高清视频| 久久久久久亚洲精品不卡| 红桃视频成人在线观看| www国产亚洲精品久久网站| 亚洲午夜未满十八勿入免费观看全集| 国产欧美精品va在线观看| 欧美日韩国产中字| 亚洲美女自拍视频| 成人网欧美在线视频| 国产精品视频永久免费播放| 日韩欧美在线视频观看| 琪琪亚洲精品午夜在线| 精品国产依人香蕉在线精品| 国产精品久久久久久av下载红粉| 两个人的视频www国产精品| 亚洲免费视频观看| 日韩视频永久免费观看| 日韩中文字幕免费看| 激情久久av一区av二区av三区| 精品欧美激情精品一区| 久久成人综合视频| 亚洲免费av网址| 国产一区二区成人| 欧美夫妻性视频| 亚洲白拍色综合图区| 91麻豆桃色免费看| 久久6精品影院| 91精品视频播放| 亚洲精品久久久久国产| 国产精品日韩欧美| 国产91ⅴ在线精品免费观看| 日本久久久久久久久久久| 中文字幕精品av| 92裸体在线视频网站| 在线观看久久久久久| 久久久久久午夜| 欧美中文字幕在线| 亚洲影院色在线观看免费| 亚洲精品在线视频| 色综合色综合久久综合频道88| 久久精品国产清自在天天线| 日韩电影免费观看在线观看| 色噜噜亚洲精品中文字幕| 亚洲午夜色婷婷在线| 国产精品久久久久久久app| 亚洲欧美日韩天堂| 欧美日韩国产综合视频在线观看中文| 九九热这里只有在线精品视| 黄网动漫久久久| 欧美精品激情在线观看| 国产精品日韩欧美大师| 欧美一级片免费在线| 在线观看精品国产视频| 性欧美视频videos6一9| 国产精品一二三视频| 91中文字幕在线| 欧美日韩国产黄| 欧美色道久久88综合亚洲精品| 亚洲精品久久久一区二区三区| 亚洲国产精品一区二区三区| 欧美夜福利tv在线| 欧美日本中文字幕| 国产精品久久久久久久久久久不卡| 国产又爽又黄的激情精品视频| 欧美一区二区三区免费观看| 日韩久久精品电影| 国产精品高潮呻吟久久av黑人| 亚洲国语精品自产拍在线观看| 欧美xxxx综合视频| 国产精品jizz在线观看麻豆| 欧美成人午夜激情在线| 欧美尺度大的性做爰视频| 亚洲黄色有码视频| 国产自产女人91一区在线观看| 韩国美女主播一区| 成人精品福利视频| 91精品国产91久久久久久久久| 国产欧美亚洲视频| 成人黄色免费网站在线观看| 国产有码在线一区二区视频| 欧美黑人一级爽快片淫片高清| 欧美午夜视频在线观看| 伊人男人综合视频网| 午夜精品一区二区三区在线播放| 欧美成人黑人xx视频免费观看| 欧美视频二区36p| 欧美激情免费观看| 国产欧美va欧美va香蕉在| 欧美大奶子在线| 亚洲人成绝费网站色www| 亚洲精品免费av| 欧美日韩在线视频一区| 精品久久久久久久中文字幕| 欧美午夜视频一区二区| 亚洲成年人影院在线| 欧美大人香蕉在线| 97超碰国产精品女人人人爽| 亚洲欧美色图片| 亚洲美女av网站| 国产一区二区在线免费视频| 欧美在线影院在线视频| www.国产精品一二区| 8090理伦午夜在线电影| 91人人爽人人爽人人精88v| 黑人巨大精品欧美一区二区一视频| 欧美成人午夜视频| 国产精品国产自产拍高清av水多| 日本午夜精品理论片a级appf发布| 尤物九九久久国产精品的分类| 77777少妇光屁股久久一区| 97国产精品久久| 欧美一区二区三区免费观看| 国产精品男人爽免费视频1| 欧美性xxxx极品hd欧美风情| 欧美亚洲激情在线| 日韩欧美成人区| 国产精品wwwwww| 成人免费视频97| 精品女同一区二区三区在线播放| 国产成人精品电影久久久| 欧美丝袜美女中出在线| 91av在线国产| 国产ts人妖一区二区三区| 欧美激情日韩图片| 亚洲美女免费精品视频在线观看| 欧美一区二区三区四区在线| 欧美精品激情在线观看| 国产99久久精品一区二区| 中文国产成人精品久久一| 国产成人精品优优av| 91欧美视频网站| 国产欧美精品一区二区三区介绍| 国产精品精品久久久| 91精品综合久久久久久五月天| 国产精品私拍pans大尺度在线| 一本大道久久加勒比香蕉|