HTML 通過js實現div的拖動效果


最近做項目,碰到一個問題,需要對div實現拖動效果。

在度娘找了很多,要么覺得代碼太長,要么就是效果不理想,不過最后還是找到了一個不錯的,感謝大神的留貼,方便了我們,就把代碼貼下面了:

 

 1 <!DOCTYPE html>
 2 <html lang="zh">
 3 
 4     <head>
 5         <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
 6         <title>Qing's Web</title>
 7         <script src="js/jquery-1.11.0.js" type="text/javascript"></script>
 8         <style type="text/css">
 9             
10             .moveBar {
11                 position: absolute;
12                 width: 250px;
13                 height: 300px;
14                 background: #666;
15                 border: solid 1px #000;
16                 margin: 0px;
17                 left:200px;
18                 top:200px;
19             }
20             
21             #banner {
22                 background: #52CCCC;
23                 cursor: move;
24             }
25         </style>
26     </head>
27 
28     <body >
29 
30         <div class="moveBar">
31             <div id="banner">按住此處移動當前div</div>
32             <div class="content">這里是其它內容</div>
33         </div>
34         
35         <script>
36             jQuery(document).ready(
37                 function() {
38                     $('#banner').mousedown(
39                         function(event) {
40                             var isMove = true;
41                             var abs_x = event.pageX - $('div.moveBar').offset().left;
42                             var abs_y = event.pageY - $('div.moveBar').offset().top;
43                             $(document).mousemove(function(event) {
44                                 if(isMove) {
45                                     var obj = $('.moveBar');
46                                     obj.css({
47                                         'left': event.pageX - abs_x,
48                                         'top': event.pageY - abs_y
49                                     });
50                                 }
51                             }).mouseup(
52                                 function() {
53                                     isMove = false;
54                                 }
55                             );
56                         }
57                     );
58                 }
59             );
60         </script>
61     </body>
62 
63 </html>

這段代碼實現了div的拖動效果,但是因為和項目有出入

原因: 

  項目上的div是有margin屬性的,如果直接使用上面的代碼,會出現鼠標位置錯位,和拖動晃動

 

解決方法是:

  當鼠標光標位置在"#banner"里面是,去除margin屬性,並給".moveBar"的left屬性和top屬性添加margin的大小

 

詳細見下面代碼實現

 1 <!DOCTYPE html>
 2 <html lang="zh">
 3 
 4     <head>
 5         <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
 6         <title>Qing's Web</title>
 7         <script src="js/jquery-1.11.0.js" type="text/javascript"></script>
 8         <style type="text/css">
 9             
10             .moveBar {
11                 position: absolute;
12                 width: 250px;
13                 height: 300px;
14                 background: #666;
15                 border: solid 1px #000;
16                 margin: 50px;
17                 left:200px;
18                 top:200px;
19             }
20             
21             #banner {
22                 background: #52CCCC;
23                 cursor: move;
24             }
25         </style>
26     </head>
27 
28     <body >
29 
30         <div class="moveBar">
31             <div id="banner">按住此處移動當前div</div>
32             <div class="content">這里是其它內容</div>
33         </div>
34         
35         <script>
36             jQuery(document).ready(
37                 function() {
38                     $('#banner').mousedown(
39                         function(event) {
40                             
41                             $(".moveBar").css("margin","0px")
42                             
43                             var isMove = true;
44                             var abs_x = event.pageX - ($('div.moveBar').offset().left+50);
45                             var abs_y = event.pageY - ($('div.moveBar').offset().top+50);
46                             $(document).mousemove(function(event) {
47                                 if(isMove) {
48                                     var obj = $('.moveBar');
49                                     obj.css({
50                                         'left': event.pageX - abs_x,
51                                         'top': event.pageY - abs_y
52                                     });
53                                 }
54                             }).mouseup(
55                                 function() {
56                                     var obj = $('.moveBar');
57                                     //還原樣式,並獲取
58                                     obj.css({
59                                         'left': $('div.moveBar').offset().left-50,
60                                         'top': $('div.moveBar').offset().top-50
61                                     });
62                                     $(".moveBar").css("margin-left","50px")
63                                     $(".moveBar").css("margin-top","50px")
64                                     
65                                     isMove = false;
66                                 }
67                             );
68                         }
69                     );
70                 }
71             );
72         </script>
73     </body>
74 
75 </html>

  注: 不過還是有點遺憾的  如果這么做的話,會有晃動效果

可以進行一下修改

1.在鼠標進入"#banner"時,就修改margin屬性

修改代碼如下:

 1 <script>
 2             $("#banner").mouseenter(function(e) {
 3                 var obj = $('.moveBar');
 4                 obj.css("margin", "0px");
 5                 obj.css({
 6                     'left': $('div.moveBar').offset().left + 50,
 7                     'top': $('div.moveBar').offset().top + 50
 8                 });
 9             })
10             $("#banner").mouseout(function() {
11                 var obj = $('.moveBar');
12                 //還原樣式,並獲取
13                 obj.css({
14                     'left': $('div.moveBar').offset().left - 50,
15                     'top': $('div.moveBar').offset().top - 50
16                 });
17                 $(".moveBar").css("margin-left", "50px")
18                 $(".moveBar").css("margin-top", "50px")
19             })
20             jQuery(document).ready(
21                 function() {
22                     $('#banner').mousedown(
23                         function(event) {
24                             /*$(".moveBar").css("margin","0px")*/
25                             var isMove = true;
26                             var abs_x;
27                             var abs_y;
28                              abs_x = event.pageX - $('div.moveBar').offset().left;
29                              abs_y= event.pageY - $('div.moveBar').offset().top;
30                             $(document).mousemove(function(event) {
31                                 if(isMove) {
32                                     var obj = $('.moveBar');
33                                     obj.css({
34                                         'left': event.pageX - abs_x,
35                                         'top': event.pageY - abs_y
36                                     });
37                                 }
38                             }).mouseup(
39                                 function() {
40                                     isMove = false;
41                                 }
42                             );
43                         });
44                 }
45             );
46         </script>

 

希望可以幫上需要的人,畢竟自己也是小白

對於更復雜的程序,我想也是這樣的道理吧

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM