今天我要向大家分享一款很特別的CSS3分頁插件,這款分頁插件不僅可以點擊分頁按鈕來實現分頁,而且可以滑動滑桿來實現任意頁面的跳轉,看看都非常酷,很適合一些個性化的個人網站使用,當然,這款分頁插件也適合ajax翻頁,效果都挺不錯的。先來看看效果圖:
怎么樣,還挺酷的吧。
當然你也可以在這里查看插件的DEMO演示。
接下來我們來分享一下源碼的實現思路,這里用到了jQuery UI框架,這么酷的滑桿是靠它實現的,不然,寫的累死。。
首先是HTML代碼:
<div class="pageSlider long"></div> <form class="pageForm" action="#"> <label class="pageLabel" for="pageInput"> Page number you'd like to go to. (Max of 30) </label> <a class="pagePrev pageSkip" href="#?page=6" title="Previous Page (6)">Previous Page</a> <input id="pageInput" class="pageInput" type="text" maxlength="3" placeholder="#"> <a class="pageNext pageSkip" href="#?page=8" title="Next Page (8)">Next Page</a> <button class="pageButton" title="Go to chosen page of results">Go</button> </form>
這里我們看到,先是定義了滑桿的區域,然后是兩個分頁按鈕,可以向前翻和向后翻,最后是一個任意頁跳轉的頁碼輸入框和一個按鈕。
別看這個滑桿很漂亮,會很難實現,其實利用jQuery UI這個東西非常簡單。
接下來看看CSS代碼:
前后翻頁按鈕:
.pageSkip { display: inline-block; background: transparent url('css/monotone_arrow_left_small.png') no-repeat -10px -10px; text-indent: -999em; background-size: 40px; opacity: 0.7; vertical-align: middle; width: 20px; height: 20px; } .pageNext { background-image: url('css/monotone_arrow_right.png'); }
很遺憾,利用了兩張箭頭圖片作為背景,不過,效果也還可以。
然后是輸入框:
.pageNumber { position: relative; top: -38px; left: 50%; font-size: 12px; color: #333; width: 60px; display: block; text-align: center; margin-left: -17px; background: white; padding: 5px 10px; border-radius: 3px; box-shadow: 0 0 5px rgba(151, 38, 20, 0.15); } .pageNumber:after { content: " "; display: block; position: absolute; width: 0; height: 0; top: 24px; border: 6px solid transparent; border-top-color: white; }
然后是滑桿的背景,利用了CSS3線性漸變屬性:
.ui-slider-horizontal { width: 60%; height: 6px; top: 0px; margin: 0px 10px 2px; border-radius: 6px; position: relative; display: inline-block; background: #F46652; background-image: repeating-linear-gradient(28deg, transparent, transparent 10px, #dd5846 10px, #dd5846 20px); box-shadow: inset 0 2px 5px rgba(0, 0, 0, 0.4); } .ui-slider-horizontal:before { content: " "; position: absolute; width: auto; height: 16px; top: -5px; left: -4px; right: -4px; border-radius: 10px; z-index: -1; background: linear-gradient(rgba(0, 0, 0, 0.1) 0%, rgba(255, 255, 255, 0.8) 90%); } .ui-slider.long .ui-slider-handle { height: 12px; width: 30px; background: #f1f1f1; display: block; position: absolute; border-radius: 50px; margin-top: -3px; margin-left: -15px; text-decoration: none; background: #f5f5f5; background: linear-gradient(#f5f5f5 0%, #cccccc 100%); box-shadow: 0 0 10px 0px rgba(0, 0, 0, 0.35), 0 0 2px 1px rgba(0, 0, 0, 0.15), 0 3px 3px rgba(0, 0, 0, 0.2), 0 7px 5px rgba(0, 0, 0, 0.1), 0 11px 10px rgba(0, 0, 0, 0.1); } .ui-slider.long .ui-slider-handle::before, .ui-slider.long .ui-slider-handle::after { content: " "; width: 2px; height: 40%; position: absolute; background: transparent; border-radius: 0px; box-shadow: -1px 0px 0px rgba(255, 255, 255, 0.8), 1px 0px 0px rgba(255, 255, 255, 0.8), 2px 0 0 rgba(0, 0, 0, 0.3), 1px 0 0 rgba(0, 0, 0, 0.3) inset; } .ui-slider.long .ui-slider-handle::before { left: 10px; top: 30%; } .ui-slider.long .ui-slider-handle::after { right: 12px; top: 30%; } @media (max-width: 550px) { .pagination { width: auto; } .pageForm { display: block; margin-top: 20px; } .pageInput { margin: 0; } .pageSlider { width: 260px; margin: 0 15px; } }
最后是js,這是用來實現翻頁邏輯的,來看看:
$(document).ready( function() { var pagesMax = 30; var pagesMin = 1; var startPage = 7; var url = "http://yoursite.com/results?page={{1}}"; $('.pagination .pageSlider').slider({ value: startPage, max: pagesMax, min: pagesMin, animate: true, create: function( event, ui ) { $('.pagination .pageSlider .ui-slider-handle').attr({ "aria-valuenow": startPage, "aria-valuetext": "Page " + startPage, "role": "slider", "aria-valuemin": pagesMin, "aria-valuemax": pagesMax, "aria-describedby": "pageSliderDescription" }); $('.pagination .pageInput').val( startPage ); } }).on( 'slide', function(event,ui) { // let user skip 10 pages with keyboard ;) if( event.metaKey || event.ctrlKey ) { if( ui.value > $(this).slider('value') ) { if( ui.value+9 < pagesMax ) { ui.value+=9; } else { ui.value=pagesMax } $(this).slider('value',ui.value); } else { if( ui.value-9 > pagesMin ) { ui.value-=9; } else { ui.value=pagesMin } $(this).slider('value',ui.value); } event.preventDefault(); } $('.pagination .pageNumber span').text( ui.value ); $('.pagination .pageInput').val( ui.value ); }).on('slidechange', function(event, ui) { $('.pagination .pageNumber') .attr('role','alert') .find('span') .text( ui.value ); $('.pagination .pageInput').val( ui.value ); $('.pagination .pageSlider .ui-slider-handle').attr({ "aria-valuenow": ui.value, "aria-valuetext": "Page " + ui.value }); }); $('.pagination .pageSlider .ui-slider-handle').on( 'keyup' , function(e) { if( e.which == 13 ) { var curPage = $('.pagination .pageSlider').slider('value'); alert( 'we would now send you to: ' + url.replace( /{{.}}/ , curPage )); } }); $('.pagination .pageInput').on( 'change' , function(e) { $('.pagination .pageSlider').slider( 'value', $(this).val() ); }); var tmr; $('.pageSkip').on('click', function(e) { e.preventDefault(); var $this = $(this); if( $this.hasClass('pageNext') ) { var curPage = $('.pagination .pageSlider').slider('value')+1; } else if( $this.hasClass('pagePrev') ) { var curPage = $('.pagination .pageSlider').slider('value')-1; } $('.pagination .pageSlider').slider('value',curPage); clearTimeout(tmr); tmr = setTimeout( function() { alert( 'we would now send you to: ' + url.replace( /{{.}}/ , curPage )); },1000); }); function sliderPips( min, max ) { var pips = max-min; var $pagination = $('.pagination .pageSlider'); for( i=0; i<=pips; i++ ) { var s = $('<span class="pagePip"/>').css({ left: '' + (100/pips)*i + '%' }); $pagination.append( s ); } var minPip = $('<span class="pageMinPip">'+min+'</span>'); var maxPip = $('<span class="pageMaxPip">'+max+'</span>'); $pagination.prepend( minPip, maxPip ); };sliderPips( pagesMin, pagesMax ); function sliderLabel() { $('.pagination .ui-slider-handle').append( '<span class="pageNumber">Page <span>' + $('.pagination .pageSlider').slider('value') + '</span></span>'); };sliderLabel(); $('.pagination .pageButton').on('click', function(e) { e.preventDefault(); var curPage = $('.pagination .pageSlider').slider('value'); alert( 'we would now send you to: ' + url.replace( /{{.}}/ , curPage )); }); });
代碼自己展開看吧,另外,和這款分頁插件類似的還有一款精美jQuery分頁插件 帶滑動條分頁,也是有滑桿的,只是個人覺得沒這款酷,呵呵。
最后,把源代碼打包一份,下載地址>>