Flyingis

          Talking and thinking freely !
          Flying in the world of GIS !
          隨筆 - 156, 文章 - 16, 評論 - 589, 引用 - 0
          數據加載中……

          [翻譯] 如何在 JavaScript 中實現拖放(下)

          ??? 譯者: Flyingis

          ??? 終于完成了全文的翻譯,由于時間比較參促,文章沒有過多的校正與潤色,閱讀過程中難免會有些許生硬或不準確的感覺,請大家見量并指出,方便他人閱讀。

          ??? 原文作者將拖放功能的實現分步講解,其核心的地方在于移動和放置元素時,鼠標、移動元素、目標元素關系的處理,只要這個問題處理好了,代碼就很容易理解,譯文僅供輔助參考之用。

          ??? 整合所有的功能

          ??? 最后我們使用所有代碼片斷,來創建一個完整的拖放函數腳本。我們所要做的第一件事情是DOM操作,如果你對此并不十分熟悉,可以閱讀《
          JavaScript Primer on DOM Manipulation 》。

          ??? 接下來的代碼創建容器和容器組,使得在這些容器中可以拖動每個元素,這在本文第二個demo的基礎上來完成。這段代碼能夠用來重新規劃元素的順序,將導航窗口放在頁面的左側或右側,或再加入你所能想到的其他的功能。

          ??? 我們將使用偽代碼來一步步進行講解,將真實的代碼通過注釋的方式留給讀者查看。

          ??? 1.當文檔第一次被加載時,我們創建一個名為dragHelper的DIV標簽,當我們開始移動一個元素的時候,dragHelper將成為一個隱藏元素,可以四處移動。真實的元素并不會被拖動,僅僅使用insertBefore和appendChild來移動。我們在開始的時候隱藏dragHelper。

          ??? 2.我們創建mouseDown和mouseUp函數。起初,所有的這些函數都假設記錄了鼠標按鈕的狀態,以至于iMouseDown變量在鼠標按下的時候為true,沒有按下的時候為false。

          ??? 3.我們創建一個全局變量DragDrops,以及一個函數CreateDragContainer。DragDrops包含一組相互關聯的容器。傳入CreateDragContainer的任何變量(代表容器)被組織成一個新的集合,使元素能夠在這些容器間自由移動。通過setAttribute,CreateDragContainer函數同樣將各容器中的元素綁定在一起。

          ??? 4.現在我們的代碼知道每個元素所在的集合,現在來看mouseMove函數。mouseMove函數首先設置了一個變量target,表示鼠標下面的目標元素,如果這個元素在集合(用getAttribute判斷)中就繼續下面操作:

          ??? 4.1.首先,在必要的時候,我們運行一個簡單的腳本來改變目標元素的class屬性,這樣就創造了一個翻動的效果。

          ??? 4.2.然后我們檢查鼠標是否點擊(因為我們的代碼已經運行到這里),如果事件發生:

          ??? 4.2.1.設置變量curTarget為當前元素。
          ??? 4.2.2.記錄元素當前在文檔中的位置,以便在需要的時候可以將它的值取回。
          ??? 4.2.3.將當前元素克隆到dragHelper,使得我們能夠移動元素的隱藏備份。
          ??? 4.2.4.因為在dragHelper中我們完全擁有了拖動元素的一個備份,這個元素會始終在鼠標下,我們必須移除dragObj屬性,讓代碼知道dragObj已不在集合中。
          ??? 4.2.5.我們快速記錄集合中每個元素當前的位置、寬度和高度。當元素第一次開始被拖動時,我們僅需做一次這種工作,否則每當鼠標移動的時候我們都必須做一次,甚至一秒內幾百次。

          ??? 4.3.如果鼠標沒有點擊,要么我們和之前擁有同樣的目標元素,要么沒有目標元素,不論哪種情況我們都不會做任何事情。

          ??? 5.現在我們檢查curTarget變量。curTarget應該僅包含一個被拖動的對象,因此如果它存在,表示我們正在拖動一個元素:

          ??? 5.1.移動隱藏DIV到鼠標,這個元素和文章前面所創建的元素一樣能夠被拖動。

          ??? 5.2.然后我們檢查鼠標是否存在于當前集合中每個容器中。

          ??? 5.2.1.如果鼠標在某個容器中,我們檢查容器中的每個元素,查看我們正拖動的元素屬于哪個位置。
          ??? 5.2.2.然后我們將所拖動的元素放置在容器中另一個元素的前面,或容器的最后位置。
          ??? 5.2.3.最后我們確定元素可見。

          ??? 6.剩下的事情就是捕獲mouseUp事件:
          ??? 6.1.首先需要隱藏dragHelper:它不再被需要,因為我們沒有拖動任何東西。
          ??? 6.2.如果拖動的元素是可見的,它已經存在于任何它所屬的容器中,所有工作已完成。
          ??? 6.3.如果拖動的元素不可見,我們將它放回它原來所在的地方。
          // ?iMouseDown?represents?the?current?mouse?button?state:?up?or?down
          /**/ /*
          lMouseState?represents?the?previous?mouse?button?state?so?that?we?can
          check?for?button?clicks?and?button?releases:

          if(iMouseDown?&&?!lMouseState)?//?button?just?clicked!
          if(!iMouseDown?&&?lMouseState)?//?button?just?released!
          */

          var ?mouseOffset? = ? null ;
          var ?iMouseDown?? = ? false
          ;
          var ?lMouseState? = ? false
          ;
          var ?dragObject?? = ? null
          ;

          // ?Demo?0?variables

          var ?DragDrops??? = ?[];
          var ?curTarget??? = ? null
          ;
          var ?lastTarget?? = ? null
          ;
          var ?dragHelper?? = ? null
          ;
          var ?tempDiv????? = ? null
          ;
          var ?rootParent?? = ? null
          ;
          var ?rootSibling? = ? null
          ;

          Number.prototype.NaN0
          = function () { return ?isNaN( this ) ? 0 : this ;}


          function ?CreateDragContainer() {
          ??
          /**/
          /*
          ??Create?a?new?"Container?Instance"?so?that?items?from?one?"Set"?can?not
          ??be?dragged?into?items?from?another?"Set"
          ??
          */

          ??
          var ?cDrag? = ?DragDrops.length;
          ??DragDrops[cDrag]?
          =
          ?[];

          ??
          /**/
          /*
          ??Each?item?passed?to?this?function?should?be?a?"container".??Store?each
          ??of?these?items?in?our?current?container
          ??
          */

          ??
          for ( var ?i = 0 ;?i < arguments.length;?i ++ ) {
          ????
          var ?cObj? =
          ?arguments[i];
          ????DragDrops[cDrag].push(cObj);
          ????cObj.setAttribute('DropObj',?cDrag);

          ????
          /**/
          /*
          ????Every?top?level?item?in?these?containers?should?be?draggable.??Do?this
          ????by?setting?the?DragObj?attribute?on?each?item?and?then?later?checking
          ????this?attribute?in?the?mouseMove?function
          ????
          */

          ????
          for ( var ?j = 0 ;?j < cObj.childNodes.length;?j ++ ) {

          ??????
          // ?Firefox?puts?in?lots?of?#text?nodesskip?these

          ?????? if (cObj.childNodes[j].nodeName == '#text')? continue ;

          ??????cObj.childNodes[j].setAttribute('DragObj',?cDrag);
          ????}

          ??}

          }


          function ?mouseMove(ev) {
          ????ev?
          = ?ev? ||
          ?window.event;

          ????
          /**/
          /*
          ????We?are?setting?target?to?whatever?item?the?mouse?is?currently?on
          ????Firefox?uses?event.target?here,?MSIE?uses?event.srcElement
          ????
          */

          ????
          var ?target? = ?ev.target? || ?ev.srcElement;
          ????
          var ?mousePos? =
          ?mouseCoords(ev);

          ????
          // ?mouseOut?event?-?fires?if?the?item?the?mouse?is?on?has?changed

          ???? if (lastTarget? && ?(target !== lastTarget)) {
          ??????
          // ?reset?the?classname?for?the?target?element

          ?????? var ?origClass? = ?lastTarget.getAttribute('origClass');
          ??????
          if (origClass)?lastTarget.className? =
          ?origClass;
          ????}


          ????
          /**/ /*
          ????dragObj?is?the?grouping?our?item?is?in?(set?from?the?createDragContainer?function).
          ????if?the?item?is?not?in?a?grouping?we?ignore?it?since?it?can't?be?dragged?with?this
          ????script.
          ????
          */

          ????
          var ?dragObj? = ?target.getAttribute('DragObj');

          ????
          // ?if?the?mouse?was?moved?over?an?element?that?is?draggable

          ???? if (dragObj != null ) {
          ??????
          // ?mouseOver?event?-?Change?the?item's?class?if?necessary

          ?????? if (target != lastTarget) {
          ????????
          var ?oClass? =
          ?target.getAttribute('overClass');
          ????????
          if (oClass)
          {
          ??????????target.setAttribute('origClass',?target.className);
          ??????????target.className?
          =
          ?oClass;
          ????????}

          ??????}


          ??????
          // ?if?the?user?is?just?starting?to?drag?the?element
          ?????? if (iMouseDown? && ? ! lMouseState) {
          ????????
          // ?mouseDown?target

          ????????curTarget? = ?target;

          ????????
          // ?Record?the?mouse?x?and?y?offset?for?the?element

          ????????rootParent? = ?curTarget.parentNode;
          ????????rootSibling?
          =
          ?curTarget.nextSibling;

          ????????mouseOffset???
          =
          ?getMouseOffset(target,?ev);

          ????????
          // ?We?remove?anything?that?is?in?our?dragHelper?DIV?so?we?can?put?a?new?item?in?it.

          ???????? for ( var ?i = 0 ;?i < dragHelper.childNodes.length;?i ++ )?dragHelper.removeChild(dragHelper.childNodes[i]);

          ????????
          // ?Make?a?copy?of?the?current?item?and?put?it?in?our?drag?helper.

          ????????dragHelper.appendChild(curTarget.cloneNode( true ));
          ????????dragHelper.style.display?
          =
          ?'block';

          ????????
          // ?set?the?class?on?our?helper?DIV?if?necessary

          ???????? var ?dragClass? = ?curTarget.getAttribute('dragClass');
          ????????
          if (dragClass)
          {
          ??????????dragHelper.firstChild.className?
          =
          ?dragClass;
          ????????}


          ????????
          // ?disable?dragging?from?our?helper?DIV?(it's?already?being?dragged)
          ????????dragHelper.firstChild.removeAttribute('DragObj');

          ????????
          /**/
          /*
          ????????Record?the?current?position?of?all?drag/drop?targets?related
          ????????to?the?element.??We?do?this?here?so?that?we?do?not?have?to?do
          ????????it?on?the?general?mouse?move?event?which?fires?when?the?mouse
          ????????moves?even?1?pixel.??If?we?don't?do?this?here?the?script
          ????????would?run?much?slower.
          ????????
          */

          ????????
          var ?dragConts? = ?DragDrops[dragObj];

          ????????
          /**/
          /*
          ????????first?record?the?width/height?of?our?drag?item.??Then?hide?it?since
          ????????it?is?going?to?(potentially)?be?moved?out?of?its?parent.
          ????????
          */

          ????????curTarget.setAttribute('startWidth',??parseInt(curTarget.offsetWidth));
          ????????curTarget.setAttribute('startHeight',?parseInt(curTarget.offsetHeight));
          ????????curTarget.style.display??
          = ?'none';

          ????????
          // ?loop?through?each?possible?drop?container

          ???????? for ( var ?i = 0 ;?i < dragConts.length;?i ++ ) {
          ??????????
          with (dragConts[i])
          {
          ????????????
          var ?pos? =
          ?getPosition(dragConts[i]);

          ????????????
          /**/
          /*
          ????????????save?the?width,?height?and?position?of?each?container.

          ????????????Even?though?we?are?saving?the?width?and?height?of?each
          ????????????container?back?to?the?container?this?is?much?faster?because
          ????????????we?are?saving?the?number?and?do?not?have?to?run?through
          ????????????any?calculations?again.??Also,?offsetHeight?and?offsetWidth
          ????????????are?both?fairly?slow.??You?would?never?normally?notice?any
          ????????????performance?hit?from?these?two?functions?but?our?code?is
          ????????????going?to?be?running?hundreds?of?times?each?second?so?every
          ????????????little?bit?helps!

          ????????????Note?that?the?biggest?performance?gain?here,?by?far,?comes
          ????????????from?not?having?to?run?through?the?getPosition?function
          ????????????hundreds?of?times.
          ????????????
          */

          ????????????setAttribute('startWidth',?parseInt(offsetWidth));
          ????????????setAttribute('startHeight',?parseInt(offsetHeight));
          ????????????setAttribute('startLeft',?pos.x);
          ????????????setAttribute('startTop',?pos.y);
          ??????????}


          ??????????
          // ?loop?through?each?child?element?of?each?container
          ?????????? for ( var ?j = 0 ;?j < dragConts[i].childNodes.length;?j ++ ) {
          ????????????
          with (dragConts[i].childNodes[j])
          {
          ??????????????
          if ((nodeName == '#text')? || ?(dragConts[i].childNodes[j] == curTarget))? continue
          ;

          ??????????????
          var ?pos? =
          ?getPosition(dragConts[i].childNodes[j]);

          ??????????????
          // ?save?the?width,?height?and?position?of?each?element

          ??????????????setAttribute('startWidth',??parseInt(offsetWidth));
          ??????????????setAttribute('startHeight',?parseInt(offsetHeight));
          ??????????????setAttribute('startLeft',???pos.x);
          ??????????????setAttribute('startTop',????pos.y);
          ????????????}

          ??????????}

          ????????}

          ??????}

          ????}


          ????
          // ?If?we?get?in?here?we?are?dragging?something
          ???? if (curTarget) {
          ??????
          // ?move?our?helper?div?to?wherever?the?mouse?is?(adjusted?by?mouseOffset)

          ??????dragHelper.style.top?? = ?mousePos.y? - ?mouseOffset.y;
          ??????dragHelper.style.left?
          = ?mousePos.x? -
          ?mouseOffset.x;

          ??????
          var ?dragConts?? =
          ?DragDrops[curTarget.getAttribute('DragObj')];
          ??????
          var ?activeCont? = ? null
          ;

          ??????
          var ?xPos? = ?mousePos.x? - ?mouseOffset.x? + ?(parseInt(curTarget.getAttribute('startWidth'))? / 2
          );
          ??????
          var ?yPos? = ?mousePos.y? - ?mouseOffset.y? + ?(parseInt(curTarget.getAttribute('startHeight')) / 2
          );

          ??????
          // ?check?each?drop?container?to?see?if?our?target?object?is?"inside"?the?container

          ?????? for ( var ?i = 0 ;?i < dragConts.length;?i ++ ) {
          ????????
          with (dragConts[i])
          {
          ??????????
          if (((getAttribute('startLeft'))? < ?xPos)? &&

          ????????????((getAttribute('startTop'))?
          < ?yPos)? &&
          ????????????((getAttribute('startLeft')?
          + ?getAttribute('startWidth'))? > ?xPos)? &&
          ????????????((getAttribute('startTop')??
          + ?getAttribute('startHeight'))? > ?yPos)) {

          ????????????
          /**/
          /*
          ????????????our?target?is?inside?of?our?container?so?save?the?container?into
          ????????????the?activeCont?variable?and?then?exit?the?loop?since?we?no?longer
          ????????????need?to?check?the?rest?of?the?containers
          ????????????
          */

          ????????????activeCont?
          = ?dragConts[i];

          ????????????
          // ?exit?the?for?loop

          ???????????? break ;
          ????????}

          ??????}

          ????}


          ????
          // ?Our?target?object?is?in?one?of?our?containers.??Check?to?see?where?our?div?belongs
          ???? if (activeCont) {
          ??????
          // ?beforeNode?will?hold?the?first?node?AFTER?where?our?div?belongs

          ?????? var ?beforeNode? = ? null ;

          ??????
          // ?loop?through?each?child?node?(skipping?text?nodes).

          ?????? for ( var ?i = activeCont.childNodes.length - 1 ;?i >= 0 ;?i -- ) {
          ????????
          with (activeCont.childNodes[i])
          {
          ??????????
          if (nodeName == '#text')? continue
          ;

          ????????????
          // ?if?the?current?item?is?"After"?the?item?being?dragged

          ???????????? if (
          ??????????????curTarget?
          != ?activeCont.childNodes[i]? &&

          ??????????????((getAttribute('startLeft')?
          + ?getAttribute('startWidth'))? > ?xPos)? &&
          ??????????????((getAttribute('startTop')??
          + ?getAttribute('startHeight'))? > ?yPos)) {
          ????????????????beforeNode?
          =
          ?activeCont.childNodes[i];
          ????????}

          ??????}

          ????}


          ????
          // ?the?item?being?dragged?belongs?before?another?item
          ???? if (beforeNode) {
          ??????
          if (beforeNode != curTarget.nextSibling)
          {
          ????????activeCont.insertBefore(curTarget,?beforeNode);
          ??????}


          ????
          // ?the?item?being?dragged?belongs?at?the?end?of?the?current?container
          ????}
          ? else ? {
          ??????
          if ((curTarget.nextSibling)? || ?(curTarget.parentNode != activeCont))
          {
          ????????activeCont.appendChild(curTarget);
          ??????}

          ????}


          ????
          // ?make?our?drag?item?visible
          ???? if (curTarget.style.display != '') {
          ??????curTarget.style.display??
          =
          ?'';
          ????}

          ??}
          ? else ? {

          ????
          // ?our?drag?item?is?not?in?a?container,?so?hide?it.

          ???? if (curTarget.style.display != 'none') {
          ??????curTarget.style.display??
          =
          ?'none';
          ????}

          ??}

          }


          ??
          // ?track?the?current?mouse?state?so?we?can?compare?against?it?next?time
          ??lMouseState? = ?iMouseDown;

          ??
          // ?mouseMove?target

          ??lastTarget?? = ?target;

          ??
          // ?track?the?current?mouse?state?so?we?can?compare?against?it?next?time

          ??lMouseState? = ?iMouseDown;

          ??
          // ?this?helps?prevent?items?on?the?page?from?being?highlighted?while?dragging

          ?? return ? false ;
          }


          function ?mouseUp(ev) {
          ??
          if (curTarget)
          {
          ????
          // ?hide?our?helper?object?-?it?is?no?longer?needed

          ????dragHelper.style.display? = ?'none';

          ????
          // ?if?the?drag?item?is?invisible?put?it?back?where?it?was?before?moving?it

          ???? if (curTarget.style.display? == ?'none') {
          ??????
          if (rootSibling)
          {
          ????????rootParent.insertBefore(curTarget,?rootSibling);
          ??????}
          ? else ?
          {
          ????????rootParent.appendChild(curTarget);
          ??????}

          ????}


          ????
          // ?make?sure?the?drag?item?is?visible
          ????curTarget.style.display? = ?'';
          ??}

          ??curTarget??
          = ? null ;
          ??iMouseDown?
          = ? false
          ;
          }


          function ?mouseDown() {
          ??iMouseDown?
          = ? true
          ;
          ??
          if (lastTarget)
          {
          ????
          return ? false
          ;
          ??}

          }


          document.onmousemove?
          = ?mouseMove;
          document.onmousedown?
          =
          ?mouseDown;
          document.onmouseup?
          =
          ?mouseUp;

          window.onload?
          = ? function ()
          {
          ??
          // ?Create?our?helper?object?that?will?show?the?item?while?dragging

          ??dragHelper? = ?document.createElement('DIV');
          ??dragHelper.style.cssText?
          =
          ?'position:absolute;display:none;';
          ????????
          ??CreateDragContainer(
          ????document.getElementById('DragContainer1'),
          ????document.getElementById('DragContainer2'),
          ????document.getElementById('DragContainer3')
          ??);

          ??document.body.appendChild(dragHelper);
          }
          <!-- ?the?mouse?over?and?dragging?class?are?defined?on?each?item? -->
          ?
          < div? class? ="DragContainer" ?id ="DragContainer1" >
          ??
          < div? class ="DragBox" ?id ="Item1" ?overClass ="OverDragBox" ?dragClass ="DragDragBox" > Item?#1 </ div >
          ??
          < div? class ="DragBox" ?id ="Item2" ?overClass ="OverDragBox" ?dragClass ="DragDragBox" > Item?#2 </ div >
          ??
          < div? class ="DragBox" ?id ="Item3" ?overClass ="OverDragBox" ?dragClass ="DragDragBox" > Item?#3 </ div >
          ??
          < div? class ="DragBox" ?id ="Item4" ?overClass ="OverDragBox" ?dragClass ="DragDragBox" > Item?#4 </ div > ?
          </ div >


          < div? class ="DragContainer" ?id ="DragContainer2" ? >
          ??
          < div? class ="DragBox" ?id ="Item5" ?overClass ="OverDragBox" ?dragClass ="DragDragBox" > Item?#5 </ div >
          ??
          < div? class ="DragBox" ?id ="Item6" ?overClass ="OverDragBox" ?dragClass ="DragDragBox" > Item?#6 </ div >
          ??
          < div? class ="DragBox" ?id ="Item7" ?overClass ="OverDragBox" ?dragClass ="DragDragBox" > Item?#7 </ div >
          ??
          < div? class ="DragBox" ?id ="Item8" ?overClass ="OverDragBox" ?dragClass ="DragDragBox" > Item?#8 </ div >
          </ div >

          < div? class ="DragContainer" ?id ="DragContainer3" >
          ??
          < div? class ="DragBox" ?id ="Item9" ?overClass ="OverDragBox" ?dragClass ="DragDragBox" > Item?#9 </ div >
          ??
          < div? class ="DragBox" ?id ="Item10" ?overClass ="OverDragBox" ?dragClass ="DragDragBox" > Item?#10 </ div >
          ??
          < div? class ="DragBox" ?id ="Item11" ?overClass ="OverDragBox" ?dragClass ="DragDragBox" > Item?#11 </ div >
          ??
          < div? class ="DragBox" ?id ="Item12" ?overClass ="OverDragBox" ?dragClass ="DragDragBox" > Item?#12 </ div >
          </ div >

          ??? 關于作者

          ??? Mark Kahn是一位Web Developer和DBA。可以通過這個網址跟他聯系:
          http://www.jslibrary.org

          ??? 原文鏈接: http://www.webreference.com/programming/javascript/mk/column2/3.html?

          ??? 另外兩篇:
          [翻譯] 如何在 JavaScript 中實現拖放(上) ?? [翻譯] 如何在 JavaScript 中實現拖放(中)

          posted on 2006-10-15 17:03 Flyingis 閱讀(6671) 評論(19)  編輯  收藏 所屬分類: Web 客戶端技術

          評論

          # re: [翻譯] 如何在 JavaScript 中實現拖放(下)  回復  更多評論   

          期待這篇文章很久了,呵呵,辛苦啦
          2006-10-15 17:44 | 馬嘉楠

          # re: [翻譯] 如何在 JavaScript 中實現拖放(下)  回復  更多評論   

          @馬嘉楠
          時間緊,翻譯的還有一些問題,歡迎意見!
          2006-10-15 18:11 | Flyingis

          # re: [翻譯] 如何在 JavaScript 中實現拖放(下)  回復  更多評論   

          好東西,能不能給出一個完整的測試用例!謝謝啦!
          2006-10-15 20:43 | jerson20081024

          # re: [翻譯] 如何在 JavaScript 中實現拖放(下)  回復  更多評論   

          @jerson20081024
          有空我整理出來。
          2006-10-16 08:55 | Flyingis

          # re: [翻譯] 如何在 JavaScript 中實現拖放(下)  回復  更多評論   

          我試了一下,用簡單的可以成功,可是不知道為什么,如:
          < div class ="DragBox" id ="Item12" overClass ="OverDragBox" dragClass ="DragDragBox" > Item #12 </ div >
          中的Item #12 換成表格或是標簽層類的內容,拖動功能有時就出差錯了,拖動時,在IE中整個列會消失,不知道為什么,您可以解釋一下么?
          謝謝
          2006-10-16 11:53 | xiaoyuer

          # re: [翻譯] 如何在 JavaScript 中實現拖放(下)  回復  更多評論   

          我把JS代碼整理出來了,可以下載:
          http://www.aygfsteel.com/Files/flyingis/drag_drop.rar
          @xiaoyuer
          我沒有仔細調試,但代碼中多處涉及父子節點的操作,換成標簽層后DOM深度改變,可能因此而影響代碼邏輯功能。
          2006-10-16 22:01 | Flyingis

          # re: [翻譯] 如何在 JavaScript 中實現拖放(下)  回復  更多評論   

          @Flyingis
          謝謝!!
          2006-10-17 10:44 | xiaoyuer

          # re: [翻譯] 如何在 JavaScript 中實現拖放(下)  回復  更多評論   

          謝謝!ke!
          2006-10-17 16:06 | ghdvb

          # re: [翻譯] 如何在 JavaScript 中實現拖放(下)  回復  更多評論   

          感謝翻譯!期待例子。
          2006-10-17 19:56 | 慈悲魚

          # re: [翻譯] 如何在 JavaScript 中實現拖放(下)  回復  更多評論   

          @Flyingis
          今天偶然打開那個作的測試頁面,發現問題了,呵呵,那個問題好像是和IE瀏覽器有關,我一直用Maxthon 今天無意用IE打開就沒出現意外情況,繼續研究!
          2006-10-18 10:03 | xiaoyuer

          # 能否保存經過拖放后的效果?  回復  更多評論   

          能否保存經過拖放后的效果?
          2006-12-07 19:30 | tom[匿名]

          # re: [翻譯] 如何在 JavaScript 中實現拖放(下)  回復  更多評論   

          http://www.cnblogs.com/cloudgamer/archive/2008/11/17/1334778.html
          這是我寫的拖動效果
          多多交流
          2008-11-23 17:15 | vvd

          # re: [翻譯] 如何在 JavaScript 中實現拖放(下)  回復  更多評論   

          請問:mouseUp函數中最后如何獲取rootParent對象中的數據?
          2009-03-25 16:33 | 小小陳

          # android tablets  回復  更多評論   

          的拖動效果
          2013-02-09 21:37 | android tablets

          # free movies online  回復  更多評論   

          今天偶然打開那個作的測試頁面,發現問題了,呵呵,那個問題好像是和IE瀏覽器有關,我一直用Maxthon 今天無意用IE打開就沒出現意外情況,繼續研究!
          2013-03-11 17:21 | free movies online

          # re: [翻譯] 如何在 JavaScript 中實現拖放(下)  回復  更多評論   

          這是我寫的拖動效果
          多多交流
          2013-03-12 16:22 | movies on demand

          # movies on line  回復  更多評論   

          ?? ???! ??? ?? ?? ?? ? ??? ?????.
          2013-03-13 17:46 | movies on line

          # movies online  回復  更多評論   

          請問:mouseUp函數中最后如何獲取rootParent對象中的數據?
          2013-03-14 16:26 | movies online

          # re: [翻譯] 如何在 JavaScript 中實現拖放(下)[未登錄]  回復  更多評論   

          為什么我的那個drapHelper一直提示是null
          2013-06-04 10:40 | zoe
          主站蜘蛛池模板: 共和县| 进贤县| 永新县| 涿州市| 平邑县| 陆丰市| 内丘县| 丰顺县| 呼伦贝尔市| 沙田区| 西平县| 淳化县| 庄浪县| 卢龙县| 峨山| 合肥市| 响水县| 新蔡县| 高淳县| 淮北市| 桃园市| 灵山县| 蓝山县| 朝阳县| 同仁县| 翁源县| 晋中市| 潼关县| 金山区| 富顺县| 双城市| 西城区| 玉龙| 兴山县| 唐山市| 云安县| 泽普县| 荣成市| 高台县| 白山市| 佛山市|