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