Show
Ignore:
Timestamp:
07/28/08 18:32:46 (20 months ago)
Author:
paul.bakaus
Message:

draggable: fixed IE scrolling but with overflowing containers and appendTo being used

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/ui/ui.draggable.js

    r492 r493  
    7272                        do { if(/auto|scroll/.test(el.css('overflow')) || (/auto|scroll/).test(el.css('overflow-y'))) return el; el = el.parent(); } while (el[0].parentNode); 
    7373                        return $(document); 
    74                 }(this.element); 
     74                }(this.helper); 
    7575                this.scrollLeftParent = function(el) { 
    7676                        do { if(/auto|scroll/.test(el.css('overflow')) || (/auto|scroll/).test(el.css('overflow-x'))) return el; el = el.parent(); } while (el[0].parentNode); 
    7777                        return $(document); 
    78                 }(this.element); 
     78                }(this.helper); 
    7979                 
    8080                this.offsetParent = this.helper.offsetParent(); var po = this.offsetParent.offset();                    //Get the offsetParent and cache its position 
     
    334334}); 
    335335 
     336 
     337 
    336338$.ui.plugin.add("draggable", "scroll", { 
    337339        start: function(e, ui) { 
     
    341343                o.scrollSpeed           = o.scrollSpeed || 20; 
    342344                 
    343                 if(i.scrollTopParent[0] != document && i.scrollTopParent[0].tagName != 'HTML') i.overflowYOffset = i.scrollTopParent.offset(); 
    344                 if(i.scrollLeftParent[0] != document && i.scrollLeftParent[0].tagName != 'HTML') i.overflowXOffset = i.scrollLeftParent.offset(); 
     345                i.overflowY = function(el) { 
     346                        do { if(/auto|scroll/.test(el.css('overflow')) || (/auto|scroll/).test(el.css('overflow-y'))) return el; el = el.parent(); } while (el[0].parentNode); 
     347                        return $(document); 
     348                }(this); 
     349                i.overflowX = function(el) { 
     350                        do { if(/auto|scroll/.test(el.css('overflow')) || (/auto|scroll/).test(el.css('overflow-x'))) return el; el = el.parent(); } while (el[0].parentNode); 
     351                        return $(document); 
     352                }(this); 
     353                 
     354                if(i.overflowY[0] != document && i.overflowY[0].tagName != 'HTML') i.overflowYOffset = i.overflowY.offset(); 
     355                if(i.overflowX[0] != document && i.overflowX[0].tagName != 'HTML') i.overflowXOffset = i.overflowX.offset(); 
    345356                 
    346357        }, 
    347358        drag: function(e, ui) { 
    348359                 
    349                 var o = ui.options; 
     360                var o = ui.options, scrolled = false; 
    350361                var i = $(this).data("draggable"); 
    351                 var scrolled = false; 
    352          
    353                 if(i.scrollTopParent[0] != document && i.scrollTopParent[0].tagName != 'HTML') { 
    354                         if((i.overflowYOffset.top + i.scrollTopParent[0].offsetHeight) - e.pageY < o.scrollSensitivity) 
    355                                 i.scrollTopParent[0].scrollTop = scrolled = i.scrollTopParent[0].scrollTop + o.scrollSpeed; 
     362                 
     363                if(i.overflowY[0] != document && i.overflowY[0].tagName != 'HTML') { 
     364                        if((i.overflowYOffset.top + i.overflowY[0].offsetHeight) - e.pageY < o.scrollSensitivity) 
     365                                i.overflowY[0].scrollTop = scrolled = i.overflowY[0].scrollTop + o.scrollSpeed; 
    356366                        if(e.pageY - i.overflowYOffset.top < o.scrollSensitivity) 
    357                                 i.scrollTopParent[0].scrollTop = scrolled = i.scrollTopParent[0].scrollTop - o.scrollSpeed; 
     367                                i.overflowY[0].scrollTop = scrolled = i.overflowY[0].scrollTop - o.scrollSpeed; 
    358368                                                         
    359369                } else { 
     
    364374                } 
    365375                 
    366                 if(i.scrollLeftParent[0] != document && i.scrollLeftParent[0].tagName != 'HTML') { 
    367                         if((i.overflowXOffset.left + i.scrollLeftParent[0].offsetWidth) - e.pageX < o.scrollSensitivity) 
    368                                 scrolled = i.scrollLeftParent[0].scrollLeft = i.scrollLeftParent[0].scrollLeft + o.scrollSpeed; 
     376                if(i.overflowX[0] != document && i.overflowX[0].tagName != 'HTML') { 
     377                        if((i.overflowXOffset.left + i.overflowX[0].offsetWidth) - e.pageX < o.scrollSensitivity) 
     378                                i.overflowX[0].scrollLeft = scrolled = i.overflowX[0].scrollLeft + o.scrollSpeed; 
    369379                        if(e.pageX - i.overflowXOffset.left < o.scrollSensitivity) 
    370                                 scrolled = i.scrollLeftParent[0].scrollLeft = i.scrollLeftParent[0].scrollLeft - o.scrollSpeed; 
     380                                i.overflowX[0].scrollLeft = scrolled = i.overflowX[0].scrollLeft - o.scrollSpeed; 
    371381                } else { 
    372382                        if(e.pageX - $(document).scrollLeft() < o.scrollSensitivity) 
     
    381391        } 
    382392}); 
     393 
    383394 
    384395$.ui.plugin.add("draggable", "snap", {