Jquery封装之拖拽解决遇到的一些小bug
来源:互联网 发布:js大于等于怎么写 编辑:程序博客网 时间:2024/05/24 06:54
第一个问题:低版本火狐在空的div 拖拽的时候,有个bug,会拖段掉并且无法拖动,
这个问题是火狐的默认行为,我们只需要取消这个默认行为即可解除这个bug。
//阻止默认行为
function preDef(event) {
var e = getEvent(event);
if (typeof e.preventDefault != 'undefined') {
e.preventDefault();
} else {
e.returnValue = false;
}
}
第二个问题:弹出窗口被拖出浏览器的边缘会导致很多问题,比如出现滚动条,出现空
白等,不利于输入等。所以,我们需要将其规定在可见的区域。
//设置不得超过浏览器边缘
document.onmousemove = function (e) {
var e = getEvent(e);
var left = e.clientX - diffX;
var top = e.clientY - diffY;
if (left < 0) {
left = 0;
} else if (left > getInner().width - _this.offsetWidth) {
left = getInner().width - _this.offsetWidth;
}
if (top < 0) {
top = 0;
} else if (top > getInner().height - _this.offsetHeight) {
top = getInner().height - _this.offsetHeight;
}
_this.style.left = left + 'px';
_this.style.top = top + 'px';
}
第三个问题:IE 浏览器在拖出浏览器外部的时候,还是会出现空白。这个bug 是IE 独
有的,所以我们需要禁止这种行为。
IE 浏览器有两个独有的方法:setCapture、releaseCapture,这两个方法,可以让鼠标滑
动到浏览器外部也可以捕获到事件,而我们的bug 就是当鼠标移出浏览器的时候,限制超过
的功能就失效了。用这个方法,即可解决这个问题。
//鼠标锁住时触发(点击住)
if (_this.setCapture) {
_this.setCapture();
}
//鼠标释放时触发(放开鼠标)
if (_this.releaseCapture) {
_this.releaseCapture();
}
第四个问题:当我们改变浏览器大小的时候,弹窗会自动水平垂直居中,而使用了拖拽
效果后,改变浏览器大小,还是会水平居中,这样的用户体验就不是很好了,我们需要的是
等当拖到哪里,就是哪里,但拖放到右下角,然后又缩放时,还能全部显示出来。
var element = this.elements[i];
window.onresize = function () {
if (element.offsetLeft > getInner().width - element.offsetWidth) {
element.style.left = getInner().width - element.offsetWidth+"px";
}
if (element.offsetTop > getInner().height - element.offsetHeight) {
element.style.top = getInner().height - element.offsetHeight+"px";
}
};
这个问题是火狐的默认行为,我们只需要取消这个默认行为即可解除这个bug。
//阻止默认行为
function preDef(event) {
var e = getEvent(event);
if (typeof e.preventDefault != 'undefined') {
e.preventDefault();
} else {
e.returnValue = false;
}
}
第二个问题:弹出窗口被拖出浏览器的边缘会导致很多问题,比如出现滚动条,出现空
白等,不利于输入等。所以,我们需要将其规定在可见的区域。
//设置不得超过浏览器边缘
document.onmousemove = function (e) {
var e = getEvent(e);
var left = e.clientX - diffX;
var top = e.clientY - diffY;
if (left < 0) {
left = 0;
} else if (left > getInner().width - _this.offsetWidth) {
left = getInner().width - _this.offsetWidth;
}
if (top < 0) {
top = 0;
} else if (top > getInner().height - _this.offsetHeight) {
top = getInner().height - _this.offsetHeight;
}
_this.style.left = left + 'px';
_this.style.top = top + 'px';
}
第三个问题:IE 浏览器在拖出浏览器外部的时候,还是会出现空白。这个bug 是IE 独
有的,所以我们需要禁止这种行为。
IE 浏览器有两个独有的方法:setCapture、releaseCapture,这两个方法,可以让鼠标滑
动到浏览器外部也可以捕获到事件,而我们的bug 就是当鼠标移出浏览器的时候,限制超过
的功能就失效了。用这个方法,即可解决这个问题。
//鼠标锁住时触发(点击住)
if (_this.setCapture) {
_this.setCapture();
}
//鼠标释放时触发(放开鼠标)
if (_this.releaseCapture) {
_this.releaseCapture();
}
第四个问题:当我们改变浏览器大小的时候,弹窗会自动水平垂直居中,而使用了拖拽
效果后,改变浏览器大小,还是会水平居中,这样的用户体验就不是很好了,我们需要的是
等当拖到哪里,就是哪里,但拖放到右下角,然后又缩放时,还能全部显示出来。
var element = this.elements[i];
window.onresize = function () {
if (element.offsetLeft > getInner().width - element.offsetWidth) {
element.style.left = getInner().width - element.offsetWidth+"px";
}
if (element.offsetTop > getInner().height - element.offsetHeight) {
element.style.top = getInner().height - element.offsetHeight+"px";
}
};
1 0
- Jquery封装之拖拽解决遇到的一些小bug
- 小bug的解决
- 小Bug锦集(记录一些编程中遇到的Bug)
- as遇到的一些bug
- 自己遇到的一些bug
- 完美实现鼠标拖拽事件,解决各种小bug,基于jquery
- javamail的一些小bug
- 解决bug的小方法
- Tomact+mysql+navicat...以及一些遇到的小bug和优化的问题集
- play framework 页面标签使用中 遇到的 一些小BUG
- Js之遇到的BUG
- 最近遇到的一些Bug的处理
- 小白Android Studio遇到一些BUG整理
- 数组遍历时遇到的小Bug
- IOS推送 遇到的小Bug
- centos安装mysql遇到的小bug
- 计算机经常遇到的小bug
- 一些平时遇到的bug总结
- android 双击退出
- 把图片文件放到Oracle数据库中以及从Oracle数据库中转储出图片到文件系统
- http接口自动化测试框架实现
- html meta中得到viewport指令
- 安卓开发——textAppearance的属性设置
- Jquery封装之拖拽解决遇到的一些小bug
- Setting and Getting Permissions设置和取得许可
- Python图像处理库PIL的基本概念介绍
- 查看mysql连接数 sql语句执行时间
- 安卓开发——TextView属性设置
- 【翻译自HVR官方手册】HVR数据复制软件介绍与术语解释
- HDU 5622 KK's Chemical(dp + 计数、特殊图的染色多项式)
- 字符串模式匹配KMP算法
- c#_使用emgu3.0操作本地摄像头