Jquery封装之拖拽解决遇到的一些小bug
2016-02-09 22:01
591 查看
第一个问题:低版本火狐在空的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";
}
};
相关文章推荐
- 使用jQuery、js实现必应搜索制作
- Jquery前端封装之一个块在整个浏览器的拖拽
- checkbox 全选/反选功能的 jquery插件(支持多页保持选择)
- jQuery-表格以及表单
- jQuery-事件以及动画
- jQuery-ajax
- Jquery库和自己定义库的区别
- jQuery操作DOM元素
- jQuery对象和dom对象区别和转化
- jQuery的deferred对象详解
- jQuery简单图片提示
- 造轮子:用Jquery控制文本框只能输入数字和字母
- jquery操作select(取值,设置选中)
- Jquery用途
- JQuery插件uriAnchor
- 2015-12-15 关于jquery mobile
- jQuery-DOM操作
- [转]jQuery EasyUI自定义DataGrid的Editor
- jQuery23(获取radiobuttomvalue及选中)
- jQuery22(替换元素,包裹元素)