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

首頁 > 編程 > JavaScript > 正文

JavaScript實現的多種鼠標拖放效果

2019-11-20 11:21:06
字體:
來源:轉載
供稿:網友

本文實例講述了JavaScript實現的多種鼠標拖放效果。分享給大家供大家參考,具體如下:

這是一款JavaScript鼠標拖放效果代碼,通過本示例了解觸發對象,設置范圍限制,指定容器大小水平及垂直鎖定,還包括獲取和釋放焦點等。

運行效果截圖如下:

在線演示地址如下:

http://demo.VeVB.COm/js/2015/js-mouse-move-fix-style-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=gb2312" /><title>拖放效果</title></head><body><script> var isIE = (document.all) ? true : false;var $ = function (id) { return "string" == typeof id ? document.getElementById(id) : id;};var Class = { create: function() {  return function() { this.initialize.apply(this, arguments); } }}var Extend = function(destination, source) { for (var property in source) {  destination[property] = source[property]; }}var Bind = function(object, fun) { return function() {  return fun.apply(object, arguments); }}var BindAsEventListener = function(object, fun) { return function(event) {  return fun.call(object, (event || window.event)); }}var CurrentStyle = function(element){ return element.currentStyle || document.defaultView.getComputedStyle(element, null);}function addEventHandler(oTarget, sEventType, fnHandler) { if (oTarget.addEventListener) {  oTarget.addEventListener(sEventType, fnHandler, false); } else if (oTarget.attachEvent) {  oTarget.attachEvent("on" + sEventType, fnHandler); } else {  oTarget["on" + sEventType] = fnHandler; }};function removeEventHandler(oTarget, sEventType, fnHandler) { if (oTarget.removeEventListener) { oTarget.removeEventListener(sEventType, fnHandler, false); } else if (oTarget.detachEvent) { oTarget.detachEvent("on" + sEventType, fnHandler); } else {  oTarget["on" + sEventType] = null; }};//拖放程序var Drag = Class.create();Drag.prototype = {//拖放對象 initialize: function(drag, options) { this.Drag = $(drag);//拖放對象 this._x = this._y = 0;//記錄鼠標相對拖放對象的位置 this._marginLeft = this._marginTop = 0;//記錄margin //事件對象(用于綁定移除事件) this._fM = BindAsEventListener(this, this.Move); this._fS = Bind(this, this.Stop); this.SetOptions(options); this.Limit = !!this.options.Limit; this.mxLeft = parseInt(this.options.mxLeft); this.mxRight = parseInt(this.options.mxRight); this.mxTop = parseInt(this.options.mxTop); this.mxBottom = parseInt(this.options.mxBottom); 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 = $(this.options.Handle) || this.Drag; this._mxContainer = $(this.options.mxContainer) || null; this.Drag.style.position = "absolute"; //透明 if(isIE && !!this.options.Transparent){  //填充拖放對象  with(this._Handle.appendChild(document.createElement("div")).style){   width = height = "100%"; backgroundColor = "#fff"; filter = "alpha(opacity:0)";  } } //修正范圍 this.Repair(); addEventHandler(this._Handle, "mousedown", BindAsEventListener(this, this.Start)); }, //設置默認屬性 SetOptions: function(options) { this.options = {//默認值  Handle:   "",//設置觸發對象(不設置則使用拖放對象)  Limit:   false,//是否設置范圍限制(為true時下面參數有用,可以是負數)  mxLeft:   0,//左邊限制  mxRight:  9999,//右邊限制  mxTop:   0,//上邊限制  mxBottom:  9999,//下邊限制  mxContainer: "",//指定限制在容器內  LockX:   false,//是否鎖定水平方向拖放  LockY:   false,//是否鎖定垂直方向拖放  Lock:   false,//是否鎖定  Transparent: false,//是否透明  onStart:  function(){},//開始移動時執行  onMove:   function(){},//移動時執行  onStop:   function(){}//結束移動時執行 }; Extend(this.options, options || {}); }, //準備拖動 Start: function(oEvent) { if(this.Lock){ return; } this.Repair(); //記錄鼠標相對拖放對象的位置 this._x = oEvent.clientX - this.Drag.offsetLeft; this._y = oEvent.clientY - this.Drag.offsetTop; //記錄margin this._marginLeft = parseInt(CurrentStyle(this.Drag).marginLeft) || 0; this._marginTop = parseInt(CurrentStyle(this.Drag).marginTop) || 0; //mousemove時移動 mouseup時停止 addEventHandler(document, "mousemove", this._fM); addEventHandler(document, "mouseup", this._fS); if(isIE){  //焦點丟失  addEventHandler(this._Handle, "losecapture", this._fS);  //設置鼠標捕獲  this._Handle.setCapture(); }else{  //焦點丟失  addEventHandler(window, "blur", this._fS);  //阻止默認動作  oEvent.preventDefault(); }; //附加程序 this.onStart(); }, //修正范圍 Repair: function() { if(this.Limit){  //修正錯誤范圍參數  this.mxRight = Math.max(this.mxRight, this.mxLeft + this.Drag.offsetWidth);  this.mxBottom = Math.max(this.mxBottom, this.mxTop + this.Drag.offsetHeight);  //如果有容器必須設置position為relative來相對定位,并在獲取offset之前設置  !this._mxContainer || CurrentStyle(this._mxContainer).position == "relative" || (this._mxContainer.style.position = "relative"); } }, //拖動 Move: function(oEvent) { //判斷是否鎖定 if(this.Lock){ this.Stop(); return; }; //清除選擇 window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty(); //設置移動參數 var iLeft = oEvent.clientX - this._x, iTop = oEvent.clientY - this._y; //設置范圍限制 if(this.Limit){  //設置范圍參數  var mxLeft = this.mxLeft, mxRight = this.mxRight, mxTop = this.mxTop, mxBottom = this.mxBottom;  //如果設置了容器,再修正范圍參數  if(!!this._mxContainer){   mxLeft = Math.max(mxLeft, 0);   mxTop = Math.max(mxTop, 0);   mxRight = Math.min(mxRight, this._mxContainer.clientWidth);   mxBottom = Math.min(mxBottom, this._mxContainer.clientHeight);  };  //修正移動參數  iLeft = Math.max(Math.min(iLeft, mxRight - this.Drag.offsetWidth), mxLeft);  iTop = Math.max(Math.min(iTop, mxBottom - this.Drag.offsetHeight), mxTop); } //設置位置,并修正margin if(!this.LockX){ this.Drag.style.left = iLeft - this._marginLeft + "px"; } if(!this.LockY){ this.Drag.style.top = iTop - this._marginTop + "px"; } //附加程序 this.onMove(); }, //停止拖動 Stop: function() { //移除事件 removeEventHandler(document, "mousemove", this._fM); removeEventHandler(document, "mouseup", this._fS); if(isIE){  removeEventHandler(this._Handle, "losecapture", this._fS);  this._Handle.releaseCapture(); }else{  removeEventHandler(window, "blur", this._fS); }; //附加程序 this.onStop(); }};</script><style> #idContainer{ border:10px solid #990000; width:600px; height:300px;}#idDrag{ border:5px solid #C4E3FD; background:#C4E3FD; width:50px; height:50px; top:50px; left:50px;}#idHandle{cursor:move; height:25px; background:#0000FF; overflow:hidden;}</style><div id="idContainer"><div id="idDrag"><div id="idHandle"></div></div></div><input id="idReset" type="button" value="復位" /><input id="idLock" type="button" value="鎖定" /><input id="idLockX" type="button" value="鎖定水平" /><input id="idLockY" type="button" value="鎖定垂直" /><input id="idLimit" type="button" value="范圍鎖定" /><input id="idLimitOff" type="button" value="取消范圍鎖定" /><br />拖放狀態:<span id="idShow">未開始</span><script> var drag = new Drag("idDrag", { mxContainer: "idContainer", Handle: "idHandle", Limit: true, onStart: function(){ $("idShow").innerHTML = "開始拖放"; }, onMove: function(){ $("idShow").innerHTML = "left:"+this.Drag.offsetLeft+";top:"+this.Drag.offsetTop; }, onStop: function(){ $("idShow").innerHTML = "結束拖放"; }});$("idReset").onclick = function(){ drag.Limit = true; drag.mxLeft = drag.mxTop = 0; drag.mxRight = drag.mxBottom = 9999; drag.LockX = drag.LockY = drag.Lock = false;}$("idLock").onclick = function(){ drag.Lock = true; }$("idLockX").onclick = function(){ drag.LockX = true; }$("idLockY").onclick = function(){ drag.LockY = true; }$("idLimit").onclick = function(){  drag.mxRight = drag.mxBottom = 200;drag.Limit = true; }$("idLimitOff").onclick = function(){ drag.Limit = false; }</script></body></html>

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
懂色av中文一区二区三区天美| 91老司机精品视频| 日韩hd视频在线观看| 在线播放日韩精品| www国产精品com| 伊人亚洲福利一区二区三区| 蜜月aⅴ免费一区二区三区| 久久久久久久久久国产精品| 国产97色在线|日韩| 亲爱的老师9免费观看全集电视剧| 成人免费在线视频网站| 日本中文字幕不卡免费| 98视频在线噜噜噜国产| 欧美激情国产日韩精品一区18| 日韩在线中文视频| 欧美国产视频日韩| 亚洲精品ady| 91精品国产91久久| 欧美黑人性猛交| 国产美女精品视频| 国产精品日韩在线一区| 91国产高清在线| 国产精品福利网| 一区二区欧美亚洲| 最近2019中文字幕mv免费看| 欧美一级大片在线免费观看| 欧美日产国产成人免费图片| 欧美激情一区二区三区高清视频| 欧美日韩精品中文字幕| 亚洲乱码国产乱码精品精| 精品夜色国产国偷在线| 国产精品第七影院| 亚洲精品乱码久久久久久金桔影视| 成人国产亚洲精品a区天堂华泰| 亚洲一区第一页| 欧美性少妇18aaaa视频| 欧美黑人一级爽快片淫片高清| 国产成人拍精品视频午夜网站| 最近的2019中文字幕免费一页| 欧美日韩高清在线观看| 中文字幕日韩精品在线观看| 亚洲国产精品久久久久秋霞不卡| 亚洲高清久久网| 国产精品亚洲一区二区三区| 日韩在线视频二区| 国产精品第2页| 宅男66日本亚洲欧美视频| 欧美激情精品久久久久| 国产999精品久久久| 日韩综合视频在线观看| 亚洲色图17p| 中文字幕免费精品一区| 国产一区在线播放| 欧美亚洲成人xxx| 欧美极品少妇xxxxⅹ裸体艺术| 91久久精品美女高潮| 国产成人亚洲综合91精品| 中文字幕亚洲国产| 美女视频久久黄| 亚洲自拍中文字幕| 8050国产精品久久久久久| 亚洲精品视频免费在线观看| 一本色道久久88综合亚洲精品ⅰ| 亚洲国产小视频在线观看| 北条麻妃一区二区三区中文字幕| 日韩av综合网站| 8090理伦午夜在线电影| 成人免费淫片aa视频免费| 美女撒尿一区二区三区| 久久精品美女视频网站| 欧美日韩中文字幕在线视频| 亚洲女人被黑人巨大进入| 成人黄色免费网站在线观看| 亚洲欧美另类国产| 精品成人国产在线观看男人呻吟| 国产精品一区二区女厕厕| 久久久精品电影| 精品国产拍在线观看| 亚洲v日韩v综合v精品v| 国产视频久久久久久久| 欧美精品在线极品| 国产精品久久电影观看| 成人h片在线播放免费网站| 色999日韩欧美国产| 欧美激情一二三| 亚洲一区二区三区久久| 精品在线小视频| 亚洲精品一区av在线播放| 国产精品久久久久av免费| 热久久99这里有精品| 亚洲老司机av| 欧美激情精品久久久| 国产亚洲精品综合一区91| 亚洲天堂免费视频| 久久久最新网址| 久久久精品电影| 亚洲精品国产精品乱码不99按摩| 欧美一级大胆视频| 欧美激情网友自拍| 日本成人在线视频网址| 久久精品中文字幕| 欧美午夜无遮挡| 精品亚洲一区二区三区在线播放| 亚洲成人免费在线视频| 北条麻妃一区二区三区中文字幕| 日韩精品免费一线在线观看| 亚洲欧美日韩国产成人| 亚洲免费电影一区| 欧美激情a∨在线视频播放| 欧美日韩电影在线观看| 亚洲视频视频在线| 伊人久久免费视频| 亚洲va久久久噜噜噜久久天堂| 97久久国产精品| 韩国19禁主播vip福利视频| 亚洲图片欧洲图片av| 欧美中文在线视频| 欧美又大粗又爽又黄大片视频| 国产欧美一区二区三区在线看| 亚洲精品中文字幕有码专区| 亚洲精品suv精品一区二区| 亚洲xxx自由成熟| 久久夜色精品亚洲噜噜国产mv| 国产成人免费av| 69视频在线免费观看| 亚洲乱码国产乱码精品精天堂| 亚洲欧洲激情在线| 最新国产成人av网站网址麻豆| 欧美巨乳在线观看| 欧美综合一区第一页| 成人444kkkk在线观看| 午夜美女久久久久爽久久| 国产精品久久久久999| 亚洲字幕在线观看| 亚洲国产精品yw在线观看| 久久久久久免费精品| 欧美一区二区三区精品电影| 欧美精品电影在线| 国产精品一区二区三区久久久| 九九视频这里只有精品| 亚洲一区二区自拍| 国产成人在线视频| 美女av一区二区三区| 91亚洲精品久久久久久久久久久久| 久久精品国产69国产精品亚洲| 日韩电视剧免费观看网站| 亚洲成av人乱码色午夜| 欧美激情va永久在线播放| 久久九九国产精品怡红院| 伦理中文字幕亚洲| 成人av.网址在线网站| 亚洲欧美国产精品专区久久| 高清欧美一区二区三区| 日韩av中文字幕在线免费观看| 久久伊人色综合| 欧美性猛交丰臀xxxxx网站| 国产精品视频在线观看| 色www亚洲国产张柏芝| 综合网日日天干夜夜久久| 亚洲最大av在线| 中文一区二区视频| 国产一区二区三区高清在线观看| 国产精品久久久久国产a级| 欧美裸体xxxx|