拖拽相关问题

上一篇简单地描述了拖拽效果的实现,下面修缮出现的各种用户体验不好的情况:

1.cursor: move -- 被拖拽的元素出现移动标志
2.被拖拽的元素一定要设置:position:absolute
3.溢出窗口
4.拖拽时将滚动条隐藏
5.低版本火狐,当被拖拽的元素无内容时会出现不可用的bug
 //跨浏览器获取窗口大小
var pageWidth = window.innerWidth;
var pageHeight = window.innerHeight;
if(typeof pageWidth != 'number'){
     if(document.compatMode == 'CSS1Compat'){
        pageWidth = document.documentElement.clientWidth;
        pageHeight = document.documentElement.clientHeight;
      }else{
        pageWidth = document.body.clientWidth;
        pageHeight = document.body.clientHeight;
      }
 }
pox.onmousedown = function(e){
    var e = e || window.event;
    preDef(e);  //低版本火狐,当被拖拽的块是空白时出现bug

    document.documentElement.style.overflow = 'hidden'; //此举作用是:当拖拽时滚动条隐藏
    var diffX = e.clientX - pox.offsetLeft;
    var diffY = e.clientY - pox.offsetTop;
    document.onmousemove = function(e){
        var e = e || window.event;
        var lefts = e.clientX - diffX;
            var tops = e.clientY - diffY;
        if(lefts<0){
            lefts = 0;
        }else if(lefts > pageWidth - pox.offsetWidth){
            lefts = pageWidth - pox.offsetWidth;
        }
                    
        if(tops<0){
            tops = 0;
        }else if(tops > pageHeight - pox.offsetHeight){
            tops = pageHeight - pox.offsetHeight;
        }

        pox.style.left = lefts + 'px';
        pox.style.top = tops + 'px';
        }
        document.onmouseup = function(){
            document.onmousemove = null;
            document.onmouseup = null;
         }
}
//阻止默认行为
function preDef(e){
        var e = e || window.event;
    if(typeof e.preventDefault != 'undefined' ){
        e.preventDefault();
    }else {
        e.returnValue = false;
    }
  }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,786评论 1 92
  • 1.CSS基本概念 1.1 CSS的定义 CSS(Cascading Style Sheets)层叠样式表,主要用...
    寥寥十一阅读 1,866评论 0 6
  • 1. tab列表折叠效果 html: 能源系统事业部 岗位名称: 工作地点 岗位名...
    lilyping阅读 1,887评论 0 1
  • 项目中需要对div进行拖拽缩放,需要有控制面板8个控制点的那种,原以为这么常见的效果应该能搜索到很多相关插件,然而...
    小虫巨蟹阅读 6,231评论 10 28
  • 十八岁过去了好久了 十八岁 激情由余 耐心不足
    左转的c阅读 175评论 0 1