2010-07-12 51 views
2

如何在YUI容器中實現自定義滾動條?在容器中使用YUI蒙皮滾動條

+0

總之,你不能在跨瀏覽器(或跨平臺)的方式做到這一點,這是一個關切嗎? – 2010-07-12 12:00:10

+0

可能至少適用於那些我可以瀏覽的瀏覽器? – 2010-07-12 12:11:40

+0

爲什麼你想這樣做會是我的下一個問題......停下來想想,也許有一個原因,大多數瀏覽器不允許這樣做。就我個人而言,我會在你的網站即將開放的時候離開,你不應該試圖改變瀏覽器的基本功能。接下來是什麼,設計我的地址欄? :) – 2010-07-12 12:40:22

回答

0

使用YUI3,您可以更改內部框架的滾動條。如果你想讓實際的瀏覽器的外部滾動條 - 只是放棄這個想法。這是不值得頭痛的。太多的瀏覽器根本不會讓你。

這裏是例如一個內部設置的麪皮在YUI 3.4

CSS:

<style type="text/css" media="screen"> 
    #video-playlist-scroll-bar-container{text-align:right} 
    #video-playlist-scroll-bar{position:relative;width:14px;border:1px solid #e0e0e0;height:379px;margin:0 auto} 
    #drag-handle-container-wrap{position:relative;top:17px;bottom:17px;left:0;width:14px;height:345px} 
    #drag-handle-container-wrap .yui3-slider-content{position:absolute;top:0;left:0} 
    #drag-handle-draggable{position:absolute;left:0;background-color:#eaeaea;text-align:center;cursor:move;width:14px} 
    #drag-handle-up,#drag-handle-down{position:absolute;display:block;width:14px;height:16px;cursor:pointer} 
    #drag-handle-up{top:0;left:0} 
    #drag-handle-down{bottom:0;left:0} 
</style> 

HTML:

<div class="yui3-u-1-12" id="video-playlist-scroll-bar-container"> 
    <div id="video-playlist-scroll-bar"> 
    <div id="drag-handle-up"><img src="/assets/images/rebrand/drag-arrow-top.gif"></div> 
    <div id="drag-handle-container-wrap"> 
    <span class="yui3-widget yui3-sliderbase yui3-slider" style=""><span class="yui3-slider-content yui3-slider-y"><div id="drag-handle-container" style="height: 345px; "> 
     <div id="drag-handle-draggable" class="yui3-dd-draggable" style="top: 0px; left: 0px; "> 
      <img src="/assets/images/rebrand/drag-handle.gif" width="9" height="100"> 
     </div></div></span></span></div> 
    <div id="drag-handle-down"><img src="/assets/images/rebrand/drag-arrow-bottom.gif"></div> 
    </div> 
</div> 

YUI:

YUI().use("base","node",'slider',function(Y){ 
    var CLICK = "click", 
     ID = "#", 
     _scrollingBuffer = 75, 
     _maxScrollRegion = 0; 

    // Slider 
    var _tmp = Y.one(ID+'playlist-container'+" .video-playlist-item"), 
     _nodeBuffer = Y.one(ID+'playlist-container').get('children').slice(-5), 
     _bufferFunction = function() { 
     var _height = 0; 
     _nodeBuffer.each(function(i) { 
      _height = _height + i.get('region').height; 
     }); 
     return _height; 
     }, 
     _buffer = _bufferFunction(), 
     _maxScrollRegion = Y.one(ID+'playlist-container').get("region").height - _buffer; 

    var listScroll = new Y.Slider({ 
     axis : 'y', 
     min : 0, // reverse min and max to make the top 
     max : _maxScrollRegion, 
     value : 0, 
     length: '345px' 
    }); 
    listScroll.renderRail = function() { 
     return Y.one("#drag-handle-container"); 
    }; 
    listScroll.renderThumb = function() { 
     return this.rail.one("#drag-handle-draggable"); 
    }; 

    listScroll.render("#drag-handle-container-wrap"); 

    listScroll.on('valueChange', Y.bind(function (e) { 
    //scroll something? 
    })); 

    Y.one("#drag-handle-up").on(CLICK, Y.bind(function (e) { 
    e.preventDefault(); 
    if (listScroll.get('value') >= _scrollingBuffer) { 
     listScroll.setValue(listScroll.get('value') - _scrollingBuffer); 
    } else { 
     listScroll.setValue(0); 
    } 
    })); 
    Y.one("#drag-handle-down").on(CLICK, Y.bind(function (e) { 
    e.preventDefault(); 
    if (listScroll.get('value') <= Math.round(_maxScrollRegion - _scrollingBuffer)) { 
     listScroll.setValue(listScroll.get('value') + _scrollingBuffer); 
     } else { 
     listScroll.setValue(_maxScrollRegion); 
    } 
    })); 
}); 

注意,這是幾乎是一個副本/ pas來自我的一個項目 - 快速刪除任何標識符。它可能不工作作爲複製/粘貼..但你會得到jist。

終產物: YUI3 Slider

您可以通過不使用走得更遠「溢出:汽車;」 CSS並使用YUI 3 ScrollView。我自己使用YUI上的分頁版本。很容易做到&百分比下降&百分比。

希望這是你要找的,而不是瀏覽器的滾動條。