HTML 通过js实现div的拖动效果
最近做项目,碰到一个问题,需要对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的拖动效果的更多相关文章
- 纯js实现积木(div)拖动效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- js:简单的拖动效果
效果演示:https://jsfiddle.net/dwqs/b5ywws9f/embedded/result/ html: <div class="wrap"> &l ...
- js实现div吸顶效果
<script src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script> < ...
- js实现一个可以兼容PC端和移动端的div拖动效果
前段时间写了一个简单的div拖动效果,不料昨天项目上正好需要一个相差不多的需求,就正好用上了,但是在移动端的时候却碰到了问题,拖动时候用到的三个事件:mousedown.mousemove.mouse ...
- jquery div拖动效果示例代码
div拖动效果想必大家都有见到过吧,实现的方法也是有很多的,下面为大家将介绍使用jquery是如何实现的,感兴趣的朋友不要错过 复制代码代码如下: <%@ page language=" ...
- js 实现win7任务栏拖动效果
前言 在某个时刻, 我认识了一个朋友. 此人在我的教唆下, 踏上了js的不归路. 前天他问我, Win7任务栏拖动效果怎么实现. 我随口就跟他说, 这简单的一逼. 在我一晚上的折腾之后, 一份潦草的代 ...
- js动画 无缝轮播 进度条 文字页面展示 div弹窗遮罩效果
1.无缝轮播 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.a ...
- html通过css,js实现div悬浮效果总汇,如原生JS实现滚动到一定位置实现div悬浮
在我们的实际开发中,经常会遇到页面中需要悬浮效果,比如最早的客服联系,对联悬浮广告等,今天为大家介绍一些如何实现div悬浮的效果. 传统的fixed实现: 通过css中的属性position参数设为f ...
- Web的鼠标拖动效果
以前写过一个拖动效果的Demo,拖拽元素新位置的计算是放在拖拽元素的mousemove事件中进行的.计算效率差,而且效果不好.所以一直有想怎样才能做出jquery-ui那种顺滑的拖拽效果. 其实顺滑的 ...
随机推荐
- 报错:APP has stopped
由于在 /MyActivity/AndroidManifest.xml 中把activity的类名打错,而导致程序加载后即出错. 而输错启动程序的类名并不会引起报错,因此这个应该引起注意.
- 使用vue-cli@3启动elementui脚手架
[vue3.x] 准备看elementui的源码,早上拉elementui提供的脚手架代码,于是下载了vue3.x(之前一直用2.x) 1.先把vue2.x卸载了 npm uninstall -g v ...
- project3 blockchain
[概念] 做服务的时候main里面不能单独有东西,都得包起来. Identifier expected是因为没有main函数 雾草,task3还要加proxy, add再干别的.难受!妈的,什么代理模 ...
- ROS零门槛学渣教程系列(二十)——ROSJAVA和Android
ros wiki地址:http://wiki.ros.org/android 第一步:安装JDK (参考博文:https://blog.csdn.net/Hong_A/article/details/ ...
- 盯着这where or 终于出了点感觉
AND 和 OR 运算符 AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来. 如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录. 如果第一个条件和第二个条件中只要有 ...
- P3383 【模板】线性筛素数
因为数据很大所以要用线性筛.. #include<iostream> #include<cstdio> using namespace std; typedef long lo ...
- [规则原则定理]规则原则定理章4 HTTP&RPC
rpc是远端过程调用,其调用协议通常包含传输协议和序列化协议. 传输协议包含: 如著名的 [gRPC](grpc / grpc.io) 使用的 http2 协议,也有如dubbo一类的自定义报文的tc ...
- lllll
- 文件操作命令(del)
del 命令: // 描述: 删除一个或多个文件.同等于 erase 命令. 相比较 rd 命令来说,del 命令只能删除文件,不能删除文件夹. // 语法: del [/p] [/f] [/s] [ ...
- mysql从的配置文件
mysql 从的配置文件 [client]port = 3306socket = /data/mysql/data/mysql.sock#default-character-set=utf8[mysq ...