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

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

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

    隨筆 - 42  文章 - 71  trackbacks - 0
    <2008年4月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    常用鏈接

    留言簿

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    最近在搞VML的東東。做了一個簡單的在HTML頁面上畫出流程圖的功能。

    既然是畫圖,就肯定遇到在頁面上拖動圖畫元素的功能。這個大家都會覺得很簡單了,無非就是mousedown, mousemove, mouseup這些事件的組合了。但是如果只是這么簡單的編寫代碼的話,當(dāng)頁面上元素都有自己的mousedown, mousemove, mouseup時,在拖動的時候就會受到干擾。根據(jù)原來開發(fā)VB程序的經(jīng)驗(yàn),我覺得應(yīng)該有一種方式能夠?qū)⑹录簳r鎖定到一個對象。翻翻資料,看到了兩個方法:setCapture和releaseCapture,哈哈,和Win32 API的函數(shù)名稱都一樣。setCapture函數(shù)的作用就是將后續(xù)的mouse事件都發(fā)送給這個對象,releaseCapture就是將鼠標(biāo)事件還回去,由document、window、object之類的自行來處理,這樣就保證了在拖動的過程中,不會由于經(jīng)過了其它的元素而受到干擾。另外,還有一個很重要的事情是,在Win32上,mouse move的事件不是一個連續(xù)的,也就是說,并不是我們每次移動1px的鼠標(biāo)指針,就會發(fā)生一個mousemove,windows會周期性檢查mouse的位置變化來產(chǎn)生mousemove的事件。所以,如果是一個很小的頁面對象,比如一個直徑5px的圓點(diǎn),如果沒有setCapture和releaseCapture,那么在鼠標(biāo)按住之后,快速的移動鼠標(biāo),就有可能鼠標(biāo)移動走了,但是小圓點(diǎn)還在原地,就是因?yàn)橄乱淮蔚膍ousemove事件已經(jīng)不再發(fā)給這個圓點(diǎn)對象了。

     

    簡單的代碼如下(WindowsXP SP2 + IE 6 測試):

     

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
      <meta http-equiv="content-type" content="text/html; charset=windows-1250">
      <meta name="generator" content="PSPad editor, www.pspad.com">
      <title>HTML Mouse Drag Move</title>
      <script language="javascript">
        // 全局變量,記錄鼠標(biāo)指針的上一次位置
        var g_x;
        var g_y;
        function mymousedown(theObj) {
          if (event.button == 1) {
            g_x = event.clientX;
            g_y = event.clientY;
            theObj.style.cursor = "move";
            //鎖定鼠標(biāo)事件
            theObj.setCapture();
          }
          return true;
        }
        function mymousemove(theObj) {
          if (event.button == 1) {
            //計(jì)算鼠標(biāo)指針的移動量
            var deltaX = event.clientX - g_x;
            var deltaY = event.clientY - g_y;
            g_x = event.clientX;
            g_y = event.clientY;
            theObj.style.pixelLeft += deltaX;
            theObj.style.pixelTop += deltaY;
          }
          return true;
        }
        function mymouseup(theObj) {
          if (event.button == 1) {
            //放開鼠標(biāo)事件
            theObj.releaseCapture();
            theObj.style.cursor="default";
          }
          return true;
        }
        //在寫JavaScript代碼時,我通常加入一個文本區(qū)域來進(jìn)行調(diào)試
        function debugInfo(info) {
          var debugWindow = document.getElementById("debug_window");
          debugWindow.value = debugWindow.value + "\r\n" + info;
       }
      </script>
      </head>
      <body>
        <div id="div1" style="border:1px solid black; position:absolute; top:10; left:10; width:100; height:100; background:red"
             onmousedown="mymousedown(this)"
             onmousemove="mymousemove(this)"
             onmouseup="mymouseup(this)">
             Hello world!
        </div>
        <br><br><br><br><br><br>
        <textarea id="debug_window" name="textarea" cols="50" rows="20"></textarea>
      </body>
    </html>

    注:要移動的對象的style中position屬性一定要指定為absolute或者relative,因?yàn)閜osition屬性默認(rèn)是static,在這種情況下,對象的left和top屬性會被CSS解釋器忽略。

    另外,在網(wǎng)上看到有同仁說:

    Mozilla 也有類似的功能,方法稍微不同 
      window.captureEvents(Event.eventType) 
       window.releaseEvents(Event.eventType)
    Event 是Mozilla特殊的一個object. 
    eventType 包括: Abort, Blur, Click, Change, DblClick, DragDrop, Error, Focus, KeyDown, KeyPress, KeyUp, Load, MouseDown

    如果要在Mozilla中兼容,就需要進(jìn)行不同的處理了。

    posted on 2008-04-16 15:32 YODA 閱讀(3810) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 成人自慰女黄网站免费大全| 77777亚洲午夜久久多喷| 日韩亚洲变态另类中文| 亚洲福利精品一区二区三区| 国产日产成人免费视频在线观看| 女人被男人桶得好爽免费视频| 久久久久久国产精品免费免费| 久久久久久久免费视频| 亚洲免费福利在线视频| 成人免费视频网站www| 噼里啪啦电影在线观看免费高清| 九九精品免费视频| 最近中文字幕mv免费高清电影| 欧洲黑大粗无码免费| 国产成人无码区免费A∨视频网站 国产成人涩涩涩视频在线观看免费 | 国产视频精品免费视频| 日韩毛片一区视频免费| 欧洲精品码一区二区三区免费看| 黄色网址大全免费| www.av在线免费观看| 国产精品黄页免费高清在线观看 | 亚洲成a人片77777老司机| 亚洲电影免费在线观看| 亚洲日韩中文字幕天堂不卡| 亚洲伊人久久大香线蕉结合| 亚洲精品无码一区二区| 无套内谢孕妇毛片免费看看| 国产va免费精品| 香港a毛片免费观看| 人成午夜免费视频在线观看| 在线免费观看中文字幕| 免费a级毛片永久免费| 亚洲色爱图小说专区| 亚洲色图黄色小说| 亚洲成_人网站图片| 国产AV无码专区亚洲AV琪琪| 两个人日本WWW免费版| 久久午夜夜伦鲁鲁片免费无码影视 | 亚洲AV无码久久久久网站蜜桃| 亚洲国产高清国产拍精品| 一级毛片a女人刺激视频免费 |