JS实现的简易拖放效果示例

发布时间 - 2026-01-10 22:12:07    点击率:

本文实例讲述了JS实现的简易拖放效果。分享给大家供大家参考,具体如下:

<!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>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>简易拖放效果</title>
</head>
<body>
<script type="text/JavaScript">
<!--
var isIE = (document.all) ? true : false;// 是否ie
var $ = function (id) {
  //返回id对象
  return "string" == typeof id ? document.getElementById(id) : id;
};
var Class = {
  // 带构造方法的类
  create: function() {
    return function() { this.initialize.apply(this, arguments); } //用apply应用下面的initialize初始化属性
  }
}
var Extend = function(destination, source) {
  //继承
  for (var property in source) {
    destination[property] = source[property];
  }
}
var Bind = function(object, fun) {
  return function() {
    return fun.apply(object, arguments);
  }
}
/**
用object对象调用fun参数是event||window event
**/
var BindAsEventListener = function(object, fun) {
  return function(event) {
    return fun.call(object, (event || window.event));
  }
}
/**
添加帧听器事件
@oTarget 目标对象
@sEventType 事件类型
@fnHandler 目标触发事件对象
**/
function addEventHandler(oTarget, sEventType, fnHandler) {
  if (oTarget.addEventListener) {
    oTarget.addEventListener(sEventType, fnHandler, false);//firefox
  } else if (oTarget.attachEvent) {
    oTarget.attachEvent("on" + sEventType, fnHandler);//ie
  } else {
    oTarget["on" + sEventType] = fnHandler;//other
  }
};
/**
清除添加的帧听器事件
@oTarget 目标对象
@sEventType 事件类型
@fnHandler 目标触发事件对象
**/
function removeEventHandler(oTarget, sEventType, fnHandler) {
  if (oTarget.removeEventListener) {
    oTarget.removeEventListener(sEventType, fnHandler, false);
  } else if (oTarget.detachEvent) {
    oTarget.detachEvent("on" + sEventType, fnHandler);
  } else {
    oTarget["on" + sEventType] = null;
  }
};
/*------------------------------相关模型构造完毕-----------------------------------*/
//拖放程序
var SimpleDrag = Class.create();
SimpleDrag.prototype = {
 //拖放对象,触发对象,初始化
 initialize: function(drag) {
  this.Drag = $(drag);
  this._x = this._y = 0;
  this._fM = BindAsEventListener(this, this.Move);//_fM方法就是应用MOVE方法参数是event||window.event
  this._fS = Bind(this, this.Stop);//_fS类方法就是Stop方法
  this.Drag.style.position = "absolute";
  this.Drag.style.cursor = "move";
  addEventHandler(this.Drag, "mousedown", BindAsEventListener(this, this.Start));
 },
 //准备拖动
 Start: function(oEvent) {
  this._x = oEvent.clientX - this.Drag.offsetLeft;
  this._y = oEvent.clientY - this.Drag.offsetTop;
  addEventHandler(document, "mousemove", this._fM);
  addEventHandler(document, "mouseup", this._fS);
 },
 //拖动
 Move: function(oEvent) {
  this.Drag.style.left = oEvent.clientX - this._x + "px";
  this.Drag.style.top = oEvent.clientY - this._y + "px";
 },
 //停止拖动
 Stop: function() {
  removeEventHandler(document, "mousemove", this._fM);
  removeEventHandler(document, "mouseup", this._fS);
 }
};
// -->
</script>
<div id="idDrag" style="border:5px solid #0000FF; background:#C4E3FD; width:50px; height:50px;"></div>
<script type="text/javascript">
<!--
new SimpleDrag("idDrag");
// -->
</script>
</body>
</html>

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。


# JS  # 拖放效果  # 浅谈js原生拖放  # Vue.js实现拖放效果的实例  # 谈谈对JavaScript原生拖放的深入理解  # javascript实现拖放效果  # JavaScript实现的多种鼠标拖放效果  # JavaScript实现网页对象拖放功能的方法  # javascript 拖放效果实现代码  # JavaScript 拖放效果代码  # Javascript拖拽&拖放系列文章3之细说事件对象  # JavaScript 图片放大镜(可拖放、缩放效果)  # 拖放  # 拖动  # 相关内容  # 遍历  # 感兴趣  # 数据结构  # 给大家  # 更多关于  # 所述  # 程序设计  # 讲述了  # body  # title  # script  # var  # JavaScript  # type  # charset  # equiv  # meta 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 焦点电影公司作品,电影焦点结局是什么?  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  Swift中switch语句区间和元组模式匹配  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  如何在橙子建站中快速调整背景颜色?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  Laravel如何自定义错误页面(404, 500)?(代码示例)  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  如何在万网自助建站中设置域名及备案?  如何快速搭建个人网站并优化SEO?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  想要更高端的建设网站,这些原则一定要坚持!  Laravel如何处理表单验证?(Requests代码示例)  nodejs redis 发布订阅机制封装实现方法及实例代码  Bootstrap CSS布局之列表  Laravel集合Collection怎么用_Laravel集合常用函数详解  开心动漫网站制作软件下载,十分开心动画为何停播?  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  使用豆包 AI 辅助进行简单网页 HTML 结构设计  中山网站推广排名,中山信息港登录入口?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  JavaScript常见的五种数组去重的方式  Laravel如何实现文件上传和存储?(本地与S3配置)  英语简历制作免费网站推荐,如何将简历翻译成英文?  Laravel Docker环境搭建教程_Laravel Sail使用指南  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  公司门户网站制作流程,华为官网怎么做?  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  Android使用GridView实现日历的简单功能  长沙企业网站制作哪家好,长沙水业集团官方网站?  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  Android GridView 滑动条设置一直显示状态(推荐)  高端智能建站公司优选:品牌定制与SEO优化一站式服务  详解阿里云nginx服务器多站点的配置  如何获取上海专业网站定制建站电话?  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  如何在 React 中条件性地遍历数组并渲染元素  佛山网站制作系统,佛山企业变更地址网上办理步骤?  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】