JavaScript实现拖拽跟随与窗口缩放效果详解
作者:竹影时间:2026-10-31 00:04:34浏览:444
本文介绍JavaScript中拖拽功能的两个延伸应用:一是拖拽时保留原位置轮廓的跟随效果,通过创建副本元素实现;二是基于嵌套Div实现窗口拖拽放大缩小功能。文章提供完整代码示例,解析绝对定位与事件处理逻辑,帮助开发者掌握高级拖拽交互技巧。
拖拽效果概述
本文主要总结拖拽功能延伸出的几种常见交互效果,供开发者参考。
拖拽跟随效果实现
第一种效果是拖拽图片时保留原位置的轮廓,即当鼠标拖动图片或物体时,其原始位置仍显示该物体的形状。
实现这一效果的方法较为简单:只需额外创建一个与原物体宽高一致的副本元素,并将该副本设为实际的拖拽对象即可。
具体实现代码如下:
跟随效果代码示例
<html
<head>
<style>
#div1 {width:100px; height:100px; background:yellow; position:absolute;}
.box{border: 1px solid black;position: absolute;}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script>
window.onload=function ()//凡是被拖拽的物体,其必须定位为absolute
{
var oDiv=document.getElementById('div1');
oDiv.onmousedown=function (ev)
{
var oEvent=ev||event;
var disX=oEvent.clientX-oDiv.offsetLeft;
var disY=oEvent.clientY-oDiv.offsetTop;
var oNewDiv=document.createElement('div');
oNewDiv.className='box';
oNewDiv.style.width=oDiv.offsetWidth-2+'px';//将2px的边框去掉
oNewDiv.style.height=oDiv.offsetHeight-2+'px';
oNewDiv.style.left=oDiv.offsetLeft+'px';
oNewDiv.style.top=oDiv.offsetTop+'px';
document.body.appendChild(oNewDiv);
document.onmousemove=function (ev)
{
var oEvent=ev||event;
oNewDiv.style.left=oEvent.clientX-disX+'px';
oNewDiv.style.top=oEvent.clientY-disY+'px';
};
document.onmouseup=function ()
{
document.onmousemove=null;
document.onmouseup=null;
document.body.removeChild(oNewDiv);
oDiv.style.left=oNewDiv.style.left;
oDiv.style.top=oNewDiv.style.top;
};
};
};
</script>
</head>
<body>
<div id="div1">
</div>
</body>
</html>
窗口缩放效果实现
第二种效果涉及窗口拖拽放大与缩小,其核心结构是在一个Div内部再嵌套另一个Div来实现。
窗口缩放代码示例
<html
<head>
<style>
#div1 {width:10px; height:10px; background:url(images/1.gif); position:absolute;bottom: 0;right: 0}//拖拉的物体,改为图片
#div2{width: 200px;height: 200px;position: relative;background: #ccc;}
.box{border: 1px solid black;position: absolute;}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script>
window.onload=function ()//凡是被拖拽的物体,其必须定位为absolute
{
var oDiv=document.getElementById('div1');
var oDiv2=document.getElementById('div2');
oDiv.onmousedown=function (ev)
{
var oEvent=ev||event;
var disX=oEvent.clientX-oDiv.offsetLeft;
var disY=oEvent.clientY-oDiv.offsetTop;
var oNewDiv=document.createElement('div');
//oNewDiv.className='box';
oNewDiv.style.width=oDiv.offsetWidth-2+'px';
oNewDiv.style.height=oDiv.offsetHeight-2+'px';
oNewDiv.style.left=oDiv.offsetLeft+'px';
oNewDiv.style.top=oDiv.offsetTop+'px';
document.body.appendChild(oNewDiv);
document.onmousemove=function (ev)
{
var oEvent=ev||event;
oDiv2.style.width=oEvent.clientX-disX+'px';//这里是它的父级
oDiv2.style.height=oEvent.clientY-disY+'px';
};
document.onmouseup=function ()
{
document.onmousemove=null;
document.onmouseup=null;
document.body.removeChild(oNewDiv);
oDiv.style.left=oDiv2.style.left;
oDiv.style.top=oDiv2.style.top;
};
};
};
</script>
</head>
<body>
<div id='div2'>
<div id="div1">
</div>
</div>
</body>
</html>
以上内容为本文的全部总结,希望能为读者的学习提供有益的帮助。
作者最新文章
JS怎么使用classList添加、删除和切换class
2026-11-05 17:26:02
网页开发三者分工:HTML结构、CSS样式与JavaScript交互怎么协作
2026-11-05 12:51:22
JS解析URL参数时怎么处理中文乱码和特殊字符
2026-11-05 12:47:23
js-cookie 存储 JSON 对象:自动序列化与反序列化技巧
2026-11-05 12:36:26
marked.js 快速上手:安装与基础 Markdown 转 HTML 示例
2026-11-05 09:32:53
