2011-04-22 216 views
0

我正在編寫一個留言框,並儘可能使用戶友好。它使用Tiny Scrollbar plugin作爲jQuery,並且我想包含一個額外的函數,這個函數可以讓我把它放到div的底部。它應該自動滾動(可能具有平滑的動畫效果)到底部。使用微調滾動條自動滾動到div的底部

下面是實際的微小的滾動條代碼:

(function($){ 
$.tiny = $.tiny || { }; 

$.tiny.scrollbar = { 
    options: { 
     axis: 'y', // vertical or horizontal scrollbar? (x || y). 
     wheel: 40, //how many pixels must the mouswheel scroll at a time. 
     scroll: true, //enable or disable the mousewheel; 
     size: 'auto', //set the size of the scrollbar to auto or a fixed number. 
     sizethumb: 'auto' //set the size of the thumb to auto or a fixed number. 
    } 
}; 

$.fn.tinyscrollbar = function(options) { 
    var oElement = null; 
    var options = $.extend({}, $.tiny.scrollbar.options, options); 

    this.each(function() { 
     oElement = new Scrollbar($(this), options); 
    }); 
    return $.extend(this, oElement); 
}; 

function Scrollbar(root, options){ 
    var oSelf = this; 
    var oWrapper = root; 
    var oViewport = { obj: $('.viewport', root) }; 
    var oContent = { obj: $('.overview', root) }; 
    var oScrollbar = { obj: $('.scrollbar', root) }; 
    var oTrack = { obj: $('.track', oScrollbar.obj) }; 
    var oThumb = { obj: $('.thumb', oScrollbar.obj) }; 
    var sAxis = options.axis == 'x', sDirection = sAxis ? 'left' : 'top', sSize = sAxis ? 'Width' : 'Height'; 
    var iScroll, iPosition = { start: 0, now: 0 }, iMouse = {}; 

    function initialize() { 
     oSelf.update(); 
     setEvents(); 
     return oSelf; 
    } 
    this.update = function(bKeepScroll){    
     oViewport[options.axis] = oViewport.obj[0]['offset'+ sSize]; 
     oContent[options.axis] = oContent.obj[0]['scroll'+ sSize]; 
     oContent.ratio = oViewport[options.axis]/oContent[options.axis]; 
     oScrollbar.obj.toggleClass('disable', oContent.ratio >= 1); 
     oTrack[options.axis] = options.size == 'auto' ? oViewport[options.axis] : options.size; 
     oThumb[options.axis] = Math.min(oTrack[options.axis], Math.max(0, (options.sizethumb == 'auto' ? (oTrack[options.axis] * oContent.ratio) : options.sizethumb))); 
     oScrollbar.ratio = options.sizethumb == 'auto' ? (oContent[options.axis]/oTrack[options.axis]) : (oContent[options.axis] - oViewport[options.axis])/(oTrack[options.axis] - oThumb[options.axis]); 
     iScroll = (bKeepScroll && oContent.ratio <= 1) ? Math.min((oContent[options.axis] - oViewport[options.axis]), Math.max(0, iScroll)) : 0; 
     setSize(); 
    } 
    function setSize(){ 
     oThumb.obj.css(sDirection, iScroll/oScrollbar.ratio); 
     oContent.obj.css(sDirection, -iScroll); 
     iMouse['start'] = oThumb.obj.offset()[sDirection]; 
     var sCssSize = sSize.toLowerCase(); 
     oScrollbar.obj.css(sCssSize, oTrack[options.axis]); 
     oTrack.obj.css(sCssSize, oTrack[options.axis]); 
     oThumb.obj.css(sCssSize, oThumb[options.axis]);  
    };  
    function setEvents(){ 
     oThumb.obj.bind('mousedown', start); 
     oThumb.obj[0].ontouchstart = function(oEvent){ 
      oEvent.preventDefault(); 
      oThumb.obj.unbind('mousedown'); 
      start(oEvent.touches[0]); 
      return false; 
     }   
     oTrack.obj.bind('mouseup', drag); 
     if(options.scroll && this.addEventListener){ 
      oWrapper[0].addEventListener('DOMMouseScroll', wheel, false); 
      oWrapper[0].addEventListener('mousewheel', wheel, false); 
     } 
     else if(options.scroll){oWrapper[0].onmousewheel = wheel;} 
    }; 
    function start(oEvent){ 
     iMouse.start = sAxis ? oEvent.pageX : oEvent.pageY; 
     var oThumbDir = parseInt(oThumb.obj.css(sDirection)); 
     iPosition.start = oThumbDir == 'auto' ? 0 : oThumbDir; 
     $(document).bind('mousemove', drag); 
     document.ontouchmove = function(oEvent){ 
      $(document).unbind('mousemove'); 
      drag(oEvent.touches[0]); 
     }; 
     $(document).bind('mouseup', end); 
     oThumb.obj.bind('mouseup', end); 
     oThumb.obj[0].ontouchend = document.ontouchend = function(oEvent){ 
      $(document).unbind('mouseup'); 
      oThumb.obj.unbind('mouseup'); 
      end(oEvent.touches[0]); 
     } 
     return false; 
    };  
    function wheel(oEvent){ 
     if(!(oContent.ratio >= 1)){ 
      oEvent = $.event.fix(oEvent || window.event); 
      var iDelta = oEvent.wheelDelta ? oEvent.wheelDelta/120 : -oEvent.detail/3; 
      iScroll -= iDelta * options.wheel; 
      iScroll = Math.min((oContent[options.axis] - oViewport[options.axis]), Math.max(0, iScroll)); 
      oThumb.obj.css(sDirection, iScroll/oScrollbar.ratio); 
      oContent.obj.css(sDirection, -iScroll); 
      oEvent.preventDefault(); 
     }; 
    }; 
    function end(oEvent){ 
     $(document).unbind('mousemove', drag); 
     $(document).unbind('mouseup', end); 
     oThumb.obj.unbind('mouseup', end); 
     document.ontouchmove = oThumb.obj[0].ontouchend = document.ontouchend = null; 
     return false; 
    }; 
    function drag(oEvent){ 
     if(!(oContent.ratio >= 1)){ 
      iPosition.now = Math.min((oTrack[options.axis] - oThumb[options.axis]), Math.max(0, (iPosition.start + ((sAxis ? oEvent.pageX : oEvent.pageY) - iMouse.start)))); 
      iScroll = iPosition.now * oScrollbar.ratio; 
      oContent.obj.css(sDirection, -iScroll); 
      oThumb.obj.css(sDirection, iPosition.now);; 
     } 
     return false; 
    }; 

    return initialize(); 
}; 
})(jQuery); 

如果你可以修改它要做到這一點,我將永遠感激!

+0

現在有一個標準的方法tinyscrollbar爲此。 – Baijs 2011-08-22 13:20:19

回答

0

我有同樣的需要。爲了解決這個問題,添加下面的函數到代碼的this.update功能後:你的滾動條的更新後

this.bottom = function(){ 
    iScroll = oContent[options.axis] - oViewport[options.axis]; 
    oThumb.obj.css(sDirection, iScroll/oScrollbar.ratio); 
    oContent.obj.css(sDirection, -iScroll); 
}; 

然後,你的頁面上添加一個調用底部()()調用:

scrollBar.update(); 
scrollBar.bottom(); 

似乎適合我。

羅比

1

你也可以使用本地的jQuery動畫功能順利實現自動滾動。而且沒有必要改變原來的小滾動條腳本。

//Get the heights of the overview and viewport 
oHeight = $('.overview:first').css("height"); 
oHeight = oHeight.substring(0, oHeight.length-2); 

vHeight = $('.viewport:first').css("height"); 
vHeight = vHeight.substring(0, vHeight.length-2); 

//Use the height values to determine how far we need to scroll 
scroll = oHeight - vHeight; 

//Animate it 
$('.overview:first').animate({ 
    top: "-"+scroll+"px" 
    }, 5000, function() { 
     // Animation complete. 
    }); 

//We need to do the same work for the track 
tHeight = $('.thumb:first').css("height"); 
tHeight = tHeight.substring(0, tHeight.length-2); 

trHeight = $('.track:first').css("height"); 
trHeight = trHeight.substring(0, trHeight.length-2); 
tScroll = trHeight - tHeight; 


$('.thumb:first').animate({ 
    top: tScroll+"px" 
    }, 5000, function() { 
     // Animation complete. 
    }, 5000); 
}); 
2
$('.overview:first').css({top: (($('.overview:first').height() - $('.viewport:first').height()) * (-1)) }); 
$('.thumb:first').css({top: $('.track:first').height() - $('.thumb:first').height()}); 
0

按照文檔可以通過調用火力擊落到滾動條的底部{$(元素).tinyscrollbar_update(「底部」)}