实现最简单的拖放操作,拖放对象不随鼠标动,只是松开鼠标后对象移动到鼠标位置,以下代码在IE中正常,但在Firefox等其他浏览器中
不起作用,请问各位老师是为什么?代码如下:
Web.UI.Schedule = function(element) {
    Web.UI.Schedule.initializeBase(this, [element]);    this.x;
    this.y;
    this.clientx;
    this.clienty;
    this.dragID = null;
    this._this = null;
};Web.UI.Schedule.prototype =
{
    initialize: function() {
        Web.UI.Schedule.callBaseMethod(this, 'initialize');
        _this = this;        var divs = document.getElementById("divmain").getElementsByTagName("div");        for (var div in divs) {
            if (div.match("Event") != null) {
                $addHandlers($get(div), { mousedown: this._onMouseDown });
            }
        }        $addHandlers($get('tablemain'), { mouseup: this._onMouseUp });        document.onselectstart = function() { return false; }
    },    _onMouseDown: function(e) {
        _this.x = parseInt(e.target.style.left);
        _this.y = parseInt(e.target.style.top);
        _this.clientx = e.clientX - e.offsetX + (document.documentElement.scrollLeft ?
                           document.documentElement.scrollLeft :
                           document.body.scrollLeft);
        _this.clienty = e.clientY - e.offsetY + (document.documentElement.scrollTop ?
                           document.documentElement.scrollTop :
                           document.body.scrollTop);
        if (e.target.id.match("Event") != null) {
            _this.dragID = e.target;
        }
    },    _onMouseUp: function(e) {
        var e = e ? e : event;        if (_this.dragID != null) {            var tx = e.clientX + (document.documentElement.scrollLeft ?
                           document.documentElement.scrollLeft :
                           document.body.scrollLeft);
            var ty = e.clientY + (document.documentElement.scrollTop ?
                           document.documentElement.scrollTop :
                           document.body.scrollTop);            var eventleft = _this.x + (tx - _this.clientx);
            var eventtop = _this.y + (ty - _this.clienty);
            if (eventleft != -1 && eventtop != -1) {
                if (eventleft != _this.x || eventtop != _this.y) {
                    _this.dragID.style.left = eventleft;
                    _this.dragID.style.top = eventtop;
                }
            }
            _this.dragID = null;
        }
    },    clearDragId: function() {
        _this.dragID = null;
    }
};

解决方案 »

  1.   


    var scrollX=0;
    var scrollY=0;
    if(document.all){ //IE
    if(!document.documentElement.scrollLeft)
    scrollX=document.body.scrollLeft;
    else
    scrollX=document.documentElement.scrollLeft;
    if(!document.documentElement.scrollTop)
    scrollY=document.body.scrollTop;
    else
    scrollY=document.documentElement.scrollTop;
    }
    else{
    scrollX=window.pageXOffset;
    scrollY=window.pageYOffset;
    }
      

  2.   

       var eventleft = _this.x + (tx - _this.clientx); 
                var eventtop = _this.y + (ty - _this.clienty); 
                if (eventleft != -1 && eventtop != -1) { 
                    if (eventleft != _this.x || eventtop != _this.y) { 
                        _this.dragID.style.left = eventleft; 
                        _this.dragID.style.top = eventtop;ff下要加px    >>>   this.dragID.style.left=eventleft+'px';
      

  3.   

    ff下要加px 
      

  4.   

    嗯.~大方向没错, 就是局部在不同浏览器的解释有问题一般如果遇到FF/safari正常,而IE不行或者相反的情况, 主要要注意: 事件监听的event差异, 浏览器屏幕坐标计算差异, 滤镜差异, 还有一些ie/ff专有方法的使用也会出现,,,ect///..所以我感觉要很好的支持多浏览器, 用jquery等js包多方便
      

  5.   

    在ff下要加上单位px不加px你更改left,top后位置不会变的
      

  6.   

    如果楼主想做拖动的效果的话,建议还是用库来实现,库的兼容性一般做的都很不错。我平时就是用YUI的库
      

  7.   

    加px了但是还是不能拖动,我用alert做测试发现在Firefox中好像div的mousedown事件不起作用,不知道为什么