一步一步理解拖拽Drag(一)

简介: 拖拽三部曲原理:     1、鼠标按下;     2、鼠标移动;     3、鼠标抬起。 View Code DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.

拖拽三部曲原理:
     1、鼠标按下;
     2、鼠标移动;
     3、鼠标抬起。

View Code
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Drag一步一步理解拖拽</title>
<script type="text/javascript">
var base = {
getId:
function (id) {
return document.getElementById(id);
},
addEvent:
function (elem, type, fn) {
if (elem.addEventListener) {
elem.addEventListener(type, fn,
false);
}
else if (elem.attachEvent) {
elem.attachEvent(
"on" + type, fn);
}
else {
elem[
"on" + type] = fn;
}
},
removeEvent:
function (elem, type, fn) {
if (elem.removeEventListener) {
elem.removeEventListener(type, fn,
false);
}
else if (elem.detachEvent) {
elem.detachEvent(
"on" + type, fn);
}
else {
elem[
"on" + type] = null;
}
}
};

function Drag(obj) {
this.obj = obj;
var _this = this;
base.addEvent(obj,
"mousedown", function (event) {
_this.startDrap(event);
});
}

Drag.prototype
= {
startDrap:
function (event) {
var _this = this;

this.mousemoveHandle = function (event) {
_this.move();
};

this.mouseupHandle = function () {
_this.stopDrag();
};

base.addEvent(document,
"mousemove", this.mousemoveHandle);

base.addEvent(document,
"mouseup", this.mouseupHandle);

base.getId(
"mdiv").innerHTML = "鼠标被按下了";
},
move:
function () {
base.getId(
"mdiv").innerHTML = "鼠标移动中。。。。";

this.obj.style.left = event.clientX - this.obj.offsetLeft + "px";
this.obj.style.top = event.clientY - this.obj.offsetTop + "px";
},
stopDrag:
function () {
base.removeEvent(document,
"mousemove", this.mousemoveHandle);
base.removeEvent(document,
"mouseup", this.mouseupHandle);

base.getId(
"mdiv").innerHTML = "鼠标抬起了";
}
};


base.addEvent(window,
"load", function () {
var tmp = base.getId("mdiv");
var b = new Drag(tmp);
});
</script>
</head>
<body>
<div id="mdiv" style="width: 300px; height: 100px; border: 1px solid red; position: absolute">
</div>
</body>
</html>

 

目录
相关文章
xal
|
JavaScript API
VSCode插件开发全攻略(九)常用API总结
更多文章请戳[VSCode插件开发全攻略系列目录导航](https://www.atatech.org/articles/121864)。 本文提炼一些常见的API使用场景供参考。 # 本文还没写完,有待补充 # 编辑器相关 ## 修改当前激活编辑器内容 替换当前编辑器全部内容: ```js vscode.window.activeTextEditor.e
xal
2954 0
|
8月前
|
数据采集 存储 机器学习/深度学习
Fuel 爬虫:Scala 中的图片数据采集与分析
Fuel 爬虫:Scala 中的图片数据采集与分析
|
8月前
|
SQL XML Java
七、MyBatis自定义映射resultMap
七、MyBatis自定义映射resultMap
246 6
|
自然语言处理 搜索推荐 数据可视化
合合信息开源智能文档处理“百宝箱”:加速、提质、个性化定制的高效助手
随着AI技术的发展,合合信息在CSDN 1024程序员节上发布了智能文档处理“百宝箱”,旨在解决文档处理中的非结构化文本提取难题。该工具集包括可视化文档解析前端TextIn ParseX、高精度向量化模型acge-embedding及文档解析测评工具markdown_tester,广泛适用于知识库构建、智能文档抽取、预训练语料管理等场景,助力开发者高效精准处理复杂文档。
391 0
合合信息开源智能文档处理“百宝箱”:加速、提质、个性化定制的高效助手
|
NoSQL Java Redis
京东双十一高并发场景下的分布式锁性能优化
【10月更文挑战第20天】在电商领域,尤其是像京东双十一这样的大促活动,系统需要处理极高的并发请求。这些请求往往涉及库存的查询和更新,如果处理不当,很容易出现库存超卖、数据不一致等问题。
366 1
|
监控 数据可视化 关系型数据库
开发者如何使用云数据库 SelectDB 版
【10月更文挑战第20天】开发者如何使用云数据库 SelectDB 版
245 0
|
域名解析 编解码 负载均衡
【域名解析DNS专栏】域名解析中的EDNS扩展:提升DNS协议灵活性
【5月更文挑战第27天】EDNS(Extension Mechanisms for DNS)是为了解决传统DNS协议在复杂网络环境下的灵活性和扩展性问题而诞生的技术。它允许在DNS请求和响应中添加额外选项,提高查询效率,支持更大数据范围,增强安全性,并实现负载均衡和故障转移。通过在DNS消息中包含EDNS部分,客户端和服务器能交换更多信息,实现更复杂的逻辑。EDNS的使用示例代码展示了如何在Python中创建和处理EDNS选项。随着技术进步,EDNS将在域名解析领域扮演更重要角色。
610 1
|
弹性计算 大数据 测试技术
阿里云服务器多少钱一年?2024年阿里云服务器价格表新鲜出炉
阿里云服务器分为轻量应用服务器和云服务器ECS,轻量适合个人开发者使用,搭建轻量级的网站、测试环境使用,专业级如大数据、科学计算、高并发网站等需要使用云服务器ECS,以下是分享阿里云服务器租用费用,也可以移步到官方服务器页面:云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年,轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服务器30元3个月
|
安全 大数据 网络安全
六、《图解HTTP》- 用户身份认证
六、《图解HTTP》- 用户身份认证
341 0
六、《图解HTTP》- 用户身份认证