原生js实现拖拽效果
面向对象 + 原生js拖拽
拖拽div等盒子模型,都是日常操作没有什么问题,如果是拖拽图片的话,会有一点小坑要踩......
那么我们看代码:
```
var Move_fn = {};
(function(Move_fn){
function Move_img() {
}
Move_img.prototype = {
constructor:Move_img,
pageInit: function(imgEle, imgContent) {
this.Ele = imgEle;
this.Box = imgContent;
imgEle.className = "_positon";//添加定位属性便于计算拖拽位置
this._mw = imgContent.offsetWidth - imgEle.offsetWidth;
this._mh = imgContent.offsetHeight - imgEle.offsetHeight;
this.mouseDown();
this.closeEvt();
},
closeEvt:function() {
var that = this;
this.Box.onclick = function(e) {
e.preventDefault();
e.stopPropagation();
if(e.target.tagName == "DIV" || e.srcElement.tagName == "div") {
Elf.utils.remove(that.Box.parentNode, that.Box.parentNode.parentNode);
}
}
},
mouseDown: function() {
var that = this;
this.Ele.onmousedown = function(e) {
that.offX = e.offsetX;
that.offY = e.offsetY;
that.mouseMove();
}
},
mouseMove: function(){
var that = this;
document.onmousemove = function(e) {
var l = e.clientX - that.offX;
var t = e.clientY - that.offY;
//判断边界设置最大最小值
if(t <= 0) {
t = 0;
}
if(t >= that._mh) {
t = that._mh;
}
if(l <= 0) {
l = 0;
}
if(l >= that._mw) {
l = that._mw;
}
that.Ele.style.top = t + "px";
that.Ele.style.left = l + "px";
that.mouseUp();
}
},
mouseUp: function() {
var that = this;
document.onmouseup = function(e) {
document.onmousemove = null;
document.onmousedown = null;
}
}
}
Move_fn.move_img = new Move_img();
}(Move_fn));
<p>使用方式也横简单,Move_fn.move_img.pageInit(imgShow, imgContent);初始化一下就好了。要求imgContent全屏遮盖</p>
<p>现在来说一下,图片拖拽的小坑。当鼠标移动到图片上的时候,会有一个,图片选中可拖拽的状态,这个时候我们执行的是ondragstart、draggable事件,而不是自行添加的onmousemove事件。会造成的后果是什么呢?拖拽后图片卡顿,自行添加的鼠标抬起事件onmouseup失效,当我们的鼠标抬起后依然会执行鼠标移动事件,即鼠标抬起后图片会跟着鼠标跑</p>

<p>解决办法:禁止掉图片自己的拖拽事件<br />
对要拖拽的图片添加几个属性
<ul>
<li>oncontextmenu:"false" <span>禁止图片右键菜单弹出</span></li>
<li>onselectstart:"false" <span>禁止图片选中</span></li>
<li>ondragstart:"false" <span>禁止图片拖拽</span></li>
<li>draggable:"false" <span>禁止图片拖拽</span></li>
</ul>
</p>
原生js实现拖拽效果的更多相关文章
- JS实现拖拽效果
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...
- js 鼠标拖拽效果实现
效果: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- 原生Js实现拖拽(适用于pc和移动端)
效果: HTML和CSS部分 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- 原生js实现拖拽功能
1. 给个div,给定一些样式 <div class="drag" style="left:0;top:0;width:100px;height:100px&quo ...
- 【转】JS容器拖拽效果,并通过cookie保存拖拽各容器的所在位置
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JS移动客户端--触屏滑动事件及js手机拖拽效果
移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件 ...
- js基础拖拽效果
function drag(ele) { const config = { mark: 0, x: 0, y: 0, left: ele.offsetLeft, top: ele.offsetTop, ...
- JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
转自<JS实现漂亮的窗口拖拽效果(可改变大小.最大化.最小化.关闭)>:http://www.jb51.net/article/73157.htm 这篇文章主要介绍了JS实现漂亮的窗口 ...
- jQuery的DOM操作实例(2)——拖拽效果&&拓展插件
一.原生JavaScript编写拖拽效果 二.jQuery编写的拖拽效果 三.在jQuery中拓展一个拖拽插件
随机推荐
- 建站手册-浏览器信息:苹果 Safari 浏览器
ylbtech-建站手册-浏览器信息:苹果 Safari 浏览器 1.返回顶部 1. http://www.w3school.com.cn/browsers/browsers_safari.asp 2 ...
- UIsearchBar 自定义样式
对于修改输入框圆角 的需求, 可以通过修改搜索框背景图片的方式设置. - (void)setSearchFieldBackgroundImage:(nullable UIImage *)backgro ...
- chromedriver安装报错
解决方法: 可以使用 npm init -f命令生成package.json,package.json中缺少的字段可以参照模板 package.json进行填充,package.json中的字段 ...
- Appium移动端自动化:Api接口详解
滑动操作与拖拽操作 # 滚动处理 # elementObj1 目标滚动元素,elementObj2 起始滚动元素 # 底层通过action操作,与web ui相反,origin_el为目标元素,des ...
- django-1-新手如何使用django
工具: python,django 流程: 1.安装python 安装python,配置python环境变量, 2.安装django django安装有两种方式: 1.通过pip安装(python2叫 ...
- python打开文件失败,报错'gbk' codec can't decode byte 0xbf in position 2: illegal multibyte sequence
python3.7,python3.6都存在的问题: 读取的文件编码是utf-8 第1行是空行.#开头都可能会报这个错误: E:\count_packet>python string_count ...
- javaIO流(四)--输入与输出支持
一.打印流 如果现在要想通过程序实现内容的输出,核心的本质一定要依靠OutputStream类来支持但是OutputStream类有一个最大的缺点,这个类的数据输出操作功能有限,所有的数据一定要转为字 ...
- c# .netframwork 4.0 调用 2.0时报错 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。
“System.IO.FileLoadException”类型的未经处理的异常在 XXX.dll 中发生 其他信息: 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的 ...
- c# WInform 自定义导航布局
问题形成原因:软件一般都是左侧树导航或上部菜单导航,做好一个软件后,有的客户可能想用一个页面做导航图像,而各个客户用的功能可能不同,所以导航布局需要自定义. 思路:1.把菜单列出来 2.双击菜单生成一 ...
- 阿里云 消息队列mq
使用阿里云消息队列 控制台地址:http://ons.console.aliyun.com/#/home/topic Demo: 支付消息mq工厂类: public class DfacePayCon ...