<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 165, comments - 198, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    dom-drag.js 拖拽學習

    Posted on 2008-09-14 11:28 G_G 閱讀(2676) 評論(0)  編輯  收藏 所屬分類: javascript

    上面加上我的注解(希望能對大家理解有幫助):
    /**************************************************
    ?*?dom-drag.js
    ?*?09.25.2001
    ?*?www.youngpup.net
    ?*?Script?featured?on?Dynamic?Drive?(
    http://www.dynamicdrive.com)?12.08.2005
    ?**************************************************
    ?*?10.28.2001?-?fixed?minor?bug?where?events
    ?*?sometimes?fired?off?the?handle,?not?the?root.
    ???*????注解:??Skynet
    ?*????email?:?liukaiyi@gmail.com
    ?*????????blog?:?m.tkk7.com/Good-Game
    ?*************************************************
    */

    var?Drag?
    =?{

    ????obj?:?
    null,
    ????
    ????
    /*?api?說明:?
    ????*?????方法調用可以參考:
    http://www.dynamicdrive.com/dynamicindex11/domdrag/
    ????*?????????o?拖拽?Handle?
    ????*????????oRoot?被拖拽?element??(可選,?默認不填?o為被拖拽對象??type=object)
    ????*????????minX,?maxX,?minY,?maxY?限制拖拽范圍?(可選,默認不填為全屏?type=int?)
    ????*?????????bSwapHorzRef,?bSwapVertRef?判斷是否允許?橫,縱向拖拽(可選,默認不填無限制?type=boolean?)
    ????*?????fXMapper(x),?fYMapper(y)??為外置函數?拖拽效果體現前調用?(x,y)?為當前element位置(可選?type=Function)
    ????
    */
    ????init?:?function(o,?oRoot,?minX,?maxX,?minY,?maxY,?bSwapHorzRef,?bSwapVertRef,?fXMapper,?fYMapper)
    ????{
    ????????
    /*?拖拽事件?掛載??(本js?主線?生命周期?描述)
    ????????*????1.?預定?o.onmousedown事件觸發運行??Drag.start。
    ????????*????2.?觸發?element->?onmousedown->Drag.start
    ????????*????????2.1????先得到?element?當前"改變初"位置,記入到?o.lastMouseX?;o.lastMouseY,掛載Drag.obj,Darp.root?為當前?element。
    ????????*????????2.2?????預定?document.onmousemove????=?Drag.drag;?document.onmouseup?=?Drag.end。
    ????????*????3.??觸發?document.onmousemove?運行?Drag.drag->?拖拽效果體現。
    ????????*????4.??觸發?document.onmouseup?運行?Drag.end->?掛載?document.onmousemove;document.onmouseup;Drag.obj取消。
    ????????
    */
    ????????o.onmousedown?
    =?Drag.start;
    ????????
    ????????
    //是否能?橫,縱向拖拽
    ????????o.hmode????????????=?bSwapHorzRef???false?:?true?;
    ????????o.vmode????????????
    =?bSwapVertRef???false?:?true?;
    ????????
    //掛載?o.root?
    ????????o.root?=?oRoot?&&?oRoot?!=?null???oRoot?:?o?;
    ????????
    ????????
    if?(o.hmode??&&?isNaN(parseInt(o.root.style.left??)))?o.root.style.left???=?"0px";
    ????????
    if?(o.vmode??&&?isNaN(parseInt(o.root.style.top???)))?o.root.style.top????=?"0px";
    ????????
    if?(!o.hmode?&&?isNaN(parseInt(o.root.style.right?)))?o.root.style.right??=?"0px";
    ????????
    if?(!o.vmode?&&?isNaN(parseInt(o.root.style.bottom)))?o.root.style.bottom?=?"0px";
    ????????
    ????????
    //?限定?移動范圍
    ????????o.minX????=?typeof?minX?!=?'undefined'???minX?:?null;
    ????????o.minY????
    =?typeof?minY?!=?'undefined'???minY?:?null;
    ????????o.maxX????
    =?typeof?maxX?!=?'undefined'???maxX?:?null;
    ????????o.maxY????
    =?typeof?maxY?!=?'undefined'???maxY?:?null;

    ????????o.xMapper?
    =?fXMapper???fXMapper?:?null;
    ????????o.yMapper?
    =?fYMapper???fYMapper?:?null;
    ????????
    ????????
    /*自定義拖拽-事件添加(相當于我們在java中的?抽象類?中未實現的方法??比如:
    ????????*????obj.onDrag?=?function(x,?y)?{
    ?????????*????????scrolldiv.style.top=y?*?(-1)?+"px";
    ????????*????}
    ????????
    */
    ????????o.root.onDragStart????
    =?new?Function();
    ????????o.root.onDragEnd????
    =?new?Function();
    ????????o.root.onDrag????????
    =?new?Function();
    ????},

    ????
    //由?function?init?>>?o.onmousedown????=?Drag.start;
    ????start?:?function(e)
    ????{
    ????????
    //得到被拖拽?element
    ????????var?o?=?Drag.obj?=?this;
    ????????e?
    =?Drag.fixE(e);
    ????????
    ????????
    //element?移動初位置?
    ????????var?y?=?parseInt(o.vmode???o.root.style.top??:?o.root.style.bottom);
    ????????var?x?
    =?parseInt(o.hmode???o.root.style.left?:?o.root.style.right?);
    ????????
    //可能的外置函數調用
    ????????o.root.onDragStart(x,?y);
    ????????
    //event?初位置?記入
    ????????o.lastMouseX????=?e.clientX;
    ????????o.lastMouseY????
    =?e.clientY;
    ????????
    ????????
    if?(o.hmode)?{
    ????????????
    if?(o.minX?!=?null)????o.minMouseX????=?e.clientX?-?x?+?o.minX;
    ????????????
    if?(o.maxX?!=?null)????o.maxMouseX????=?o.minMouseX?+?o.maxX?-?o.minX;
    ????????}?
    else?{
    ????????????
    if?(o.minX?!=?null)?o.maxMouseX?=?-o.minX?+?e.clientX?+?x;
    ????????????
    if?(o.maxX?!=?null)?o.minMouseX?=?-o.maxX?+?e.clientX?+?x;
    ????????}

    ????????
    if?(o.vmode)?{
    ????????????
    if?(o.minY?!=?null)????o.minMouseY????=?e.clientY?-?y?+?o.minY;
    ????????????
    if?(o.maxY?!=?null)????o.maxMouseY????=?o.minMouseY?+?o.maxY?-?o.minY;
    ????????}?
    else?{
    ????????????
    if?(o.minY?!=?null)?o.maxMouseY?=?-o.minY?+?e.clientY?+?y;
    ????????????
    if?(o.maxY?!=?null)?o.minMouseY?=?-o.maxY?+?e.clientY?+?y;
    ????????}
    ????????
    ????????
    /*>>>>>>>>>>>比較關鍵的掛載<<<<<<<<<<<<<<
    ????????*????
    ????????*????使用?document.onmousemove?事件?而不使用?element的,是應為當拖動太快,可能會脫離element.
    ????????
    */
    ????????document.onmousemove????
    =?Drag.drag;
    ????????document.onmouseup????????
    =?Drag.end;

    ????????
    return?false;
    ????},

    ????
    //由?function?start>>?document.onmousemove????=?Drag.drag;
    ????drag?:?function(e)
    ????{
    ????????e?
    =?Drag.fixE(e);
    ????????var?o?
    =?Drag.obj;

    ????????var?ey????
    =?e.clientY;
    ????????var?ex????
    =?e.clientX;
    ????????
    //得到?element?當前位置(vmode,hmode判斷是否可以橫縱向拖拽)
    ????????var?y?=?parseInt(o.vmode???o.root.style.top??:?o.root.style.bottom);
    ????????var?x?
    =?parseInt(o.hmode???o.root.style.left?:?o.root.style.right?);
    ????????var?nx,?ny;
    ????????
    ????????
    if?(o.minX?!=?null)?ex?=?o.hmode???Math.max(ex,?o.minMouseX)?:?Math.min(ex,?o.maxMouseX);
    ????????
    if?(o.maxX?!=?null)?ex?=?o.hmode???Math.min(ex,?o.maxMouseX)?:?Math.max(ex,?o.minMouseX);
    ????????
    if?(o.minY?!=?null)?ey?=?o.vmode???Math.max(ey,?o.minMouseY)?:?Math.min(ey,?o.maxMouseY);
    ????????
    if?(o.maxY?!=?null)?ey?=?o.vmode???Math.min(ey,?o.maxMouseY)?:?Math.max(ey,?o.minMouseY);
    ????????
    ????????
    //本js中?最主要的地方:?
    ????????
    //得到?鼠標移動?向量?drap(x,y)?=?fun_drap:event(x,y)?-?fun_start:event(x,y)
    ????????
    //并于?得到拖拽效果:??element(x,y)?+?drap(x,y)?
    ????????nx?=?x?+?((ex?-?o.lastMouseX)?*?(o.hmode???1?:?-1));
    ????????ny?
    =?y?+?((ey?-?o.lastMouseY)?*?(o.vmode???1?:?-1));

    ????????
    if?(o.xMapper)????????nx?=?o.xMapper(y)
    ????????
    else?if?(o.yMapper)????ny?=?o.yMapper(x)
    ????????
    ????????
    //效果體現
    ????????Drag.obj.root.style[o.hmode???"left"?:?"right"]?=?nx?+?"px";
    ????????Drag.obj.root.style[o.vmode?
    ??"top"?:?"bottom"]?=?ny?+?"px";
    ????????Drag.obj.lastMouseX????
    =?ex;
    ????????Drag.obj.lastMouseY????
    =?ey;
    ????????
    //調用外置函數
    ????????Drag.obj.root.onDrag(nx,?ny);
    ????????
    return?false;
    ????},
    ????
    ????
    //由?function?start>>?document.onmouseup????????=?Drag.end;
    ????end?:?function()
    ????{
    ????????document.onmousemove?
    =?null;
    ????????document.onmouseup???
    =?null;
    ????????Drag.obj.root.onDragEnd(????parseInt(Drag.obj.root.style[Drag.obj.hmode?
    ??"left"?:?"right"]),?
    ????????????????????????????????????parseInt(Drag.obj.root.style[Drag.obj.vmode?
    ??"top"?:?"bottom"]));
    ????????Drag.obj?
    =?null;
    ????},
    ????
    ????
    //跨?瀏覽器?得到?event
    ????fixE?:?function(e)
    ????{
    ????????
    if?(typeof?e?==?'undefined')?e?=?window.event;
    ????????
    if?(typeof?e.layerX?==?'undefined')?e.layerX?=?e.offsetX;
    ????????
    if?(typeof?e.layerY?==?'undefined')?e.layerY?=?e.offsetY;
    ????????
    return?e;
    ????}
    };

    主站蜘蛛池模板: 久久综合亚洲色hezyo| 亚洲人成网站在线观看播放青青| 亚洲av无码专区在线观看下载 | 尤物视频在线免费观看| 妞干网在线免费视频| 亚洲精品国产高清在线观看| 97人伦色伦成人免费视频| 亚洲人成777在线播放| 97无码免费人妻超级碰碰碰碰| 亚洲日本在线电影| 免费特级黄毛片在线成人观看 | 国产精品亚洲а∨无码播放不卡| 四虎在线视频免费观看| 久久无码av亚洲精品色午夜| 亚洲精品456播放| 久青草视频在线观看免费 | 亚洲视频在线不卡| 中文字幕无码播放免费| 国产成人亚洲综合一区| 免费黄色网址入口| 有色视频在线观看免费高清在线直播 | 国产AV无码专区亚洲精品| 色欲国产麻豆一精品一AV一免费 | 男人的天堂网免费网站| 亚洲色欲www综合网| 毛片a级三毛片免费播放| 男男gvh肉在线观看免费| 综合亚洲伊人午夜网 | 亚洲AV本道一区二区三区四区| 99久久免费中文字幕精品| 国产亚洲精品影视在线| 亚洲伊人成无码综合网 | 亚洲2022国产成人精品无码区| 亚洲一级免费视频| 亚洲精品国产第一综合99久久| 国产AV无码专区亚洲AV漫画| 99久久国产免费中文无字幕| 亚洲国产精品无码久久九九大片 | 亚洲熟女www一区二区三区| 免费大黄网站在线观| 日本不卡免费新一区二区三区|