最近做项目,碰到一个问题,需要对div实现拖动效果。

在度娘找了很多,要么觉得代码太长,要么就是效果不理想,不过最后还是找到了一个不错的,感谢大神的留贴,方便了我们,就把代码贴下面了:

 <!DOCTYPE html>
<html lang="zh"> <head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Qing's Web</title>
<script src="js/jquery-1.11.0.js" type="text/javascript"></script>
<style type="text/css"> .moveBar {
position: absolute;
width: 250px;
height: 300px;
background: #666;
border: solid 1px #000;
margin: 0px;
left:200px;
top:200px;
} #banner {
background: #52CCCC;
cursor: move;
}
</style>
</head> <body > <div class="moveBar">
<div id="banner">按住此处移动当前div</div>
<div class="content">这里是其它内容</div>
</div> <script>
jQuery(document).ready(
function() {
$('#banner').mousedown(
function(event) {
var isMove = true;
var abs_x = event.pageX - $('div.moveBar').offset().left;
var abs_y = event.pageY - $('div.moveBar').offset().top;
$(document).mousemove(function(event) {
if(isMove) {
var obj = $('.moveBar');
obj.css({
'left': event.pageX - abs_x,
'top': event.pageY - abs_y
});
}
}).mouseup(
function() {
isMove = false;
}
);
}
);
}
);
</script>
</body> </html>

这段代码实现了div的拖动效果,但是因为和项目有出入

原因:

  项目上的div是有margin属性的,如果直接使用上面的代码,会出现鼠标位置错位,和拖动晃动

解决方法是:

  当鼠标光标位置在"#banner"里面是,去除margin属性,并给".moveBar"的left属性和top属性添加margin的大小

详细见下面代码实现

 <!DOCTYPE html>
<html lang="zh"> <head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Qing's Web</title>
<script src="js/jquery-1.11.0.js" type="text/javascript"></script>
<style type="text/css"> .moveBar {
position: absolute;
width: 250px;
height: 300px;
background: #666;
border: solid 1px #000;
margin: 50px;
left:200px;
top:200px;
} #banner {
background: #52CCCC;
cursor: move;
}
</style>
</head> <body > <div class="moveBar">
<div id="banner">按住此处移动当前div</div>
<div class="content">这里是其它内容</div>
</div> <script>
jQuery(document).ready(
function() {
$('#banner').mousedown(
function(event) { $(".moveBar").css("margin","0px") var isMove = true;
var abs_x = event.pageX - ($('div.moveBar').offset().left+50);
var abs_y = event.pageY - ($('div.moveBar').offset().top+50);
$(document).mousemove(function(event) {
if(isMove) {
var obj = $('.moveBar');
obj.css({
'left': event.pageX - abs_x,
'top': event.pageY - abs_y
});
}
}).mouseup(
function() {
var obj = $('.moveBar');
//还原样式,并获取
obj.css({
'left': $('div.moveBar').offset().left-50,
'top': $('div.moveBar').offset().top-50
});
$(".moveBar").css("margin-left","50px")
$(".moveBar").css("margin-top","50px") isMove = false;
}
);
}
);
}
);
</script>
</body> </html>

注: 不过还是有点遗憾的  如果这么做的话,会有晃动效果

可以进行一下修改

1.在鼠标进入"#banner"时,就修改margin属性

修改代码如下:

 <script>
$("#banner").mouseenter(function(e) {
var obj = $('.moveBar');
obj.css("margin", "0px");
obj.css({
'left': $('div.moveBar').offset().left + 50,
'top': $('div.moveBar').offset().top + 50
});
})
$("#banner").mouseout(function() {
var obj = $('.moveBar');
//还原样式,并获取
obj.css({
'left': $('div.moveBar').offset().left - 50,
'top': $('div.moveBar').offset().top - 50
});
$(".moveBar").css("margin-left", "50px")
$(".moveBar").css("margin-top", "50px")
})
jQuery(document).ready(
function() {
$('#banner').mousedown(
function(event) {
/*$(".moveBar").css("margin","0px")*/
var isMove = true;
var abs_x;
var abs_y;
abs_x = event.pageX - $('div.moveBar').offset().left;
abs_y= event.pageY - $('div.moveBar').offset().top;
$(document).mousemove(function(event) {
if(isMove) {
var obj = $('.moveBar');
obj.css({
'left': event.pageX - abs_x,
'top': event.pageY - abs_y
});
}
}).mouseup(
function() {
isMove = false;
}
);
});
}
);
</script>

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

对于更复杂的程序,我想也是这样的道理吧

HTML 通过js实现div的拖动效果的更多相关文章

  1. 纯js实现积木(div)拖动效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. js:简单的拖动效果

    效果演示:https://jsfiddle.net/dwqs/b5ywws9f/embedded/result/ html: <div class="wrap"> &l ...

  3. js实现div吸顶效果

    <script src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script> < ...

  4. js实现一个可以兼容PC端和移动端的div拖动效果

    前段时间写了一个简单的div拖动效果,不料昨天项目上正好需要一个相差不多的需求,就正好用上了,但是在移动端的时候却碰到了问题,拖动时候用到的三个事件:mousedown.mousemove.mouse ...

  5. jquery div拖动效果示例代码

    div拖动效果想必大家都有见到过吧,实现的方法也是有很多的,下面为大家将介绍使用jquery是如何实现的,感兴趣的朋友不要错过 复制代码代码如下: <%@ page language=" ...

  6. js 实现win7任务栏拖动效果

    前言 在某个时刻, 我认识了一个朋友. 此人在我的教唆下, 踏上了js的不归路. 前天他问我, Win7任务栏拖动效果怎么实现. 我随口就跟他说, 这简单的一逼. 在我一晚上的折腾之后, 一份潦草的代 ...

  7. js动画 无缝轮播 进度条 文字页面展示 div弹窗遮罩效果

    1.无缝轮播 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.a ...

  8. html通过css,js实现div悬浮效果总汇,如原生JS实现滚动到一定位置实现div悬浮

    在我们的实际开发中,经常会遇到页面中需要悬浮效果,比如最早的客服联系,对联悬浮广告等,今天为大家介绍一些如何实现div悬浮的效果. 传统的fixed实现: 通过css中的属性position参数设为f ...

  9. Web的鼠标拖动效果

    以前写过一个拖动效果的Demo,拖拽元素新位置的计算是放在拖拽元素的mousemove事件中进行的.计算效率差,而且效果不好.所以一直有想怎样才能做出jquery-ui那种顺滑的拖拽效果. 其实顺滑的 ...

随机推荐

  1. 后台商品搜索功能开发SQL

    在做后台的商品搜索功能开发时遇到了一些问题记录下来 版本一 <select id="SelectByNameAndParentId resultMap="Base_resul ...

  2. 【Spring学习】Spring的源码解析之路 ——【step1】基础环境配置 + IDEA快捷键整理

    前导: 本次主要是关于“基础环境搭建”的内容,分为三个部分,(1)查看源码和项目需要的开发集成环境Intellig IDEA的使用,(2)如何导入源码,(3)在这个过程中梳理出的快捷键 正文:==== ...

  3. JVM学习02:GC垃圾回收和内存分配

    JVM学习02:GC垃圾回收和内存分配 写在前面:本系列分享主要参考资料是  周志明老师的<深入理解Java虚拟机>第二版. GC垃圾回收和内存分配知识要点Xmind梳理 案例分析1-(G ...

  4. adduser与useradd的区别

    问题:使用 useradd 创建用户,发现 /home 目录下没有自动创建关于用户的目录.所以做了一番调查研究 useradd是一个linux命令,但是它提供了很多参数在用户使用的时候根据自己的需要进 ...

  5. SpringCloud微服务基础

    1.传统项目架构  传统项目分为三层架构,将业务逻辑层.数据库访问层.控制层放入在一个项目中.适合于个人或者小团队开发,不适合大团队开发. 2.分布式项目架构(解耦方案) 根据业务需求进行拆分成N个子 ...

  6. Android 8.0+ 更新安装apk失败的问题

    最近做项目发现Android 8.0+ 更新安装apk时 出现安装失败的情况  总结原因是 缺少安装的权限 Android 8.0 (Android O)为了针对一些流氓软件引导用户安装其他无关应用. ...

  7. 十七、Java中数组常见的几种排序方法!

    转载自:https://www.cnblogs.com/bekeyuan123/p/6891875.html 数组的定义: // 3种定义方式 int[] arr = new int[5]; int[ ...

  8. docker-2 tomcat

    启动容器命令 docker run -d -p 8080:8080 -v /root/tomcat/webapps:/usr/local/tomcat/webapps -v /root/tomcat/ ...

  9. RNQOJ PID28 / [Stupid]愚蠢的宠物

    勉勉强强够着点并查集的边,题目吧他分类到并查集也无可厚非,这里与常规的并查集的区别在于要做一个mark数组进行一下标记,展开来说就是对于要查询的A,B,先对A进行处理,把A所有的前驱也就是双亲节点进行 ...

  10. java33

    1.面向接口编程:将实现类对象(键盘鼠标)赋值给接口类型的变量(USB) interface修饰的类名称 好处:调用时可以是一个方法体即可(实现通用编程) 2.内部类:在类中定义了一个类 ------ ...