jQuery實現了一個拖拽小東西的程序

  本來是想寫個包含碰撞,慣性等物理模型的引擎的,但是寫了幾句就不想搞了,太麻煩,而且工作也忙,就隨便寫了下,實現了拖拽小方塊,釋放之後,根據釋放時的速度慣性移動一段距離,帶碰撞的。

drag.html:

  1. <html>
  2. <head>
  3.     <title>-----drag-----</title>
  4.     <meta http-equiv="Content-Type" content="text/html;charset=utf-8">  
  5.     <script type='text/javascript' src='jquery-1.2.6.min.js'></script>
  6.     <script type='text/javascript'>
  7.     var keyDown = false;//鼠標是否按下    
  8.     var start = new position();
  9.     var end = new position();//鼠標釋放時的位置
  10.     var track = [];//路徑
  11.     var stamp = [];//時間點
  12.     var startTime;
  13.     $(document).ready(function() {
  14.         $('#box').css({width:'20px',height:'20px',background:'red',position:'absolute',left:'100px',top:'200px'}).bind('mousedown', down);  //綁定鼠標按下事件  
  15.         $(this).bind('mousemove', move).bind('mouseup', release);//頁面綁定鼠標移動和釋放事件
  16.     });
  17.     function down() {//鼠標按下
  18.         keyDown = true;
  19.     }
  20.     function move() {//移動           
  21.         if(keyDown) {
  22.             drag();
  23.         }
  24.         else if(end.x != undefined &&end.y != undefined) {
  25.             //speed = (track[track.length-3].x - track[track.length-1].x)/(stamp[stamp.length-3] - stamp[stamp.length-1]);//速度
  26.             detx = (track[track.length-1].x - track[track.length-3].x)*5 - 10;
  27.             dety = (track[track.length-1].y - track[track.length-3].y)*5 - 10;  
  28.             
  29.             $('#box').animate({
  30.                 left: stopX(end.x + detx*2/10),
  31.                 top: stopY(end.y + dety*2/10)
  32.             }, 10).animate({
  33.                 left: stopX(end.x + detx*5/10),
  34.                 top: stopY(end.y + dety*5/10)
  35.             }, 50).animate({
  36.                 left: stopX(end.x + detx*8/10),
  37.                 top: stopY(end.y + dety*8/10)
  38.             }, 80).animate({
  39.                 left: stopX(end.x + detx),
  40.                 top: stopY(end.y + dety)
  41.             }, 100);
  42.             end.x = end.y = undefined;
  43.             track = [];//清空數組
  44.             stamp = [];
  45.         }
  46.         function stopX(x) {
  47.             if(x < 0) x=-x;
  48.             if(x > 986) x=2*986-x;
  49.             return x;
  50.         }
  51.         function stopY(y) {         
  52.             if(y < 0) y=-y;
  53.             if(y > 589) y=2*589 - y;
  54.             return y;
  55.         }
  56.     }
  57.     function drag() {//拖動   
  58.         var time = 0;
  59.         //if(startTime != undefined) time = new Date().getTime() - startTime;       
  60.         var speed = 0;
  61.         var x = event.x-10;
  62.         var y = event.y-10;//-10把鼠標放到box的中間         
  63.         track.push(new position(x,y));//將點放入軌跡數組中
  64.         stamp.push(new Date().getTime());//時間放入時間點數組中
  65.         stopOver() //阻止越界
  66.         //$('#box').css({left: x,top:y});
  67.         $('#box').animate({
  68.             left: x,
  69.             top: y
  70.         }, 0.1);
  71.         function stopOver() {
  72.             if(x < 0) x=-x;
  73.             if(x > 986) x=2*986-x;
  74.             if(y < 0) y=-y;
  75.             if(y > 589) y=2*589 - y;
  76.         }
  77.     }
  78.     function release() {//鼠標釋放
  79.         keyDown = false;
  80.         end.x = event.x;
  81.         end.y = event.y;        
  82.     }   
  83.     function position(x, y) {//座標
  84.         this.x = x;
  85.         this.y = y;
  86.     }
  87.     </script>
  88. </head>
  89. <body>
  90.     <div id='box'></div>
  91. </body>
  92. </html>
  93. 同樣,jquery就不貼了,網上可以下。慣性效果顯示的還是不怎麼理想,只在ie中測試,其他瀏覽器中未測試。
  94. 11月1日更新:
  95.     今天整理亂七八糟的程序,發現了這個,又試了下,居然不好使了。弄了幾個小時,簡直快崩潰的時候,發現居然是編碼的問題。頁面charset是utf-8,而文件保存的時候用的是ansi,暈菜了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章