等虚线框的拖拽

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
.box{border: 3px solid yellow; position: absolute;}
#div1{width: 100px; height: 100px; background: red; position: absolute;}
</style>
<script type="text/javascript">

window.onload = function(){
dragDown(‘div1‘);
};
function dragDown(id){
var oDiv = document.getElementById(id);
var disX = 0; //用于记住鼠标按下时 左侧 鼠标和浏览器边框的距离 减去 div距离浏览器边框的距离
var disY = 0; //用于记住鼠标按下时 顶部 鼠标和浏览器边框的距离 减去 div距离浏览器边框的距离

oDiv.onmousedown = function(ev){
var oEvent = ev||event;
disX=oEvent.clientX-oDiv.offsetLeft; //div内部鼠标距离div边框的左侧距离
disY=oEvent.clientY-oDiv.offsetTop //div内部鼠标距离div边框的顶部距离

var oNewDiv=document.createElement(‘div‘); //创建一个div 用保证拖动的时间有虚线框出现
oNewDiv.className=‘box‘; //为了新创建的div添加样式
oNewDiv.style.width=oDiv.offsetWidth+‘px‘; //把要拖动的物体的宽度赋值给创建的div
oNewDiv.style.height=oDiv.offsetHeight+‘px‘;
oNewDiv.style.left=oDiv.style.left; //把要拖得的物体的left值赋值给创建的div
oNewDiv.style.top=oDiv.style.top;
document.body.appendChild(oNewDiv); //把创建好的div添加到页面里边去

if(oDiv.setCapture){ //利用IE的事件捕获解决IE鼠标按下选中文字的默认事件
oDiv.onmousemove= fnMove;
oDiv.onmouseup = fnUp;

oDiv.setCapture();
}else{ //谷歌和火狐解决默认鼠标按下方案
document.onmousemove= fnMove;
document.onmouseup = fnUp;
}

function fnMove(ev){ //把取消按下时间封装成函数
var oEvent = ev||event; //时间对象
var l = oEvent.clientX-disX; //鼠标移动事件 移动时用鼠标距离浏览器的边框距离减去div内鼠标的距离
var t = oEvent.clientY-disY;

if (l<50){ //不能div脱离游览器当小于0是直接复制为0 //小于50 就贴上去可以做磁性吸附的感觉
l=0;
} else if (l>document.documentElement.clientWidth-oDiv.offsetWidth){
l=document.documentElement.clientWidth-oDiv.offsetWidth;
} //如何移动的距离 大于 浏览器宽度减去div本身的宽度 则把 浏览器宽度减去div本身的宽度赋值给鼠标移动的距离

if (t<0){ //同理 就是顶部距离
t=0;
} else if (t>document.documentElement.clientHeight-oDiv.offsetHeight){
t=document.documentElement.clientHeight-oDiv.offsetHeight;
}

oNewDiv.style.left=l+‘px‘;
oNewDiv.style.top=t+‘px‘;
}

function fnUp(){
this.onmousemove=null; //弹起时把移动事件清空
this.onmouseup=null; //弹起时把按下事件清空
if(this.releaseCapture){
this.releaseCapture(); //如果是IE则存在时间捕获 所以取消
}
document.body.removeChild(oNewDiv); //鼠标抬起时把创建的div删除掉
oDiv.style.left=oNewDiv.style.left; //创建的div的位置赋值给要移动的物体
oDiv.style.top=oNewDiv.style.top;
}
return false; //把默认的鼠标按下时间屏蔽掉
};
}
</script>
</head>
<body>
文字字字
<div id="div1">拖拽</div>
</body>
</html>

时间: 2024-08-09 23:47:34

等虚线框的拖拽的相关文章

鼠标事件-拖拽5(带虚线框的拖拽)

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <style> #div2 { width: 150px; height: 150px; position: absolute; background: #CCCCCC; } .box{ border: 1px dashed black; position: absol

拖拽+重叠+虚线框(解决移动文字复制问题)

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>拖拽+重叠+虚线框(解决移动文字复制问题)</title> <meta name="descriptio

css 可拖拽列表

<!DOCTYPE HTML> <html><head> <meta charset="UTF-8"> <title>div横向拖拽排序</title> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> <style type="text/css"> b

jQuery 鼠标拖拽排序

<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>测试的拖拽功能</title> <style type="text/css"> body, div { margin: 0; paading: 0; f

jQuery实现div横向拖拽排序

参考:https://blog.csdn.net/kongjiea/article/details/45578033 效果图: html <h1>div横向拖拽排序</h1> <div class="box"> <div class="horizontal-div" id="div1">div1</div> <div class="horizontal-div"

Qt之QAbstractItemView视图项拖拽(二)

一.需求说明 上一篇文章Qt之QAbstractItemView视图项拖拽(一)讲述了实现QAbstractItemView视图项拖拽的一种方式,是基于QDrag实现的,这个类是qt自己封装好了的,所以可定制性也就没有了那么强,最明显的是,这个类在执行exec方法后,mouse系列的回调接口就被阻塞了,随之而来的问题就是拖拽时item项没有了hover特性,为了解决这个问题,我们就不能使用QDrag类来实现拖拽了,这也是这篇文章我要讲述的内容. 二.效果展示 如图1是demo的效果展示,比较丑,

bcb ole拖拽功能的实现

最近项目中用到了OLE 拖拽功能 和BCB 一个Form的Drag 不同的是,只有实现了OLE 拖拽才能,从其他程序拖拽数据到Form 下面的代码实现了,同HTML网页拖拽到Form时,Form获得HTML数据 其核心思想是, 1,要实现 COM的 IDropTarget 接口 2,RegisterDragDrop(handle,this); 注册窗口的拖拽 3,窗口类构造 OleInitialize(NULL); 4,窗口类析构时 OleUninitialize(); 5,在下面的代码中,我将

Duilib嵌入CEF禁止浏览器响应拖拽事件

在开发中有一个需求,拖拽外部文件到客户端,然后客户端响应WM_DROPFILES消息,在拖拽消息里处理一下业务,最后把处理结果显示到客户区html中,但实际中发现当拖拽文件到客户区,浏览器首先处理了拖拽事件,外层的Win32窗口无法捕捉到拖拽消息,因此要想实现此操作,刚开始我想了一个本办法,在客户区最外层罩了一个透明的Win32原生窗口,这样拖拽文件时,在最外层透明窗口的WM_DROPFILES消息中处理具体业务,最后用C++调用js函数,在页面显示处理结果. 方法一: 透明窗口 Layered

拖拽原理以及代码实现

拖拽功能主要是用在让用户做一些自定义的动作,比如拖动排序,弹出框拖动移动等等:挺好玩儿.下面分享一下拖拽的原理,和码友们一起学习! 拖拽流程: 1)事件:onmousedown:onmousemove:onmouseup: 2)实现原理分析: 拖拽是通过获取鼠标移动的距离来实现的,即计算移动前的位置的坐标(x,y)与移动中的位置的坐标(x,y)差值.当onmousedown或onmousemove时,都可以获取到当前鼠标的位置,即移动前的坐标值与移动中的坐标值.参考如下图: 如上图所示: 在on