現在的網站有的時候為了簡潔就是很多的單頁滑屏滾動介紹,主要呈現方式有兩種,一種是整體的元素一直排列下去,假設有五個需要展示的全屏頁面,那么高度是500%,只是展示100%,剩下的可以通過transform進行Y軸定位,也可以通過margin-top實現,第二種就是所有的子元素和頁面一樣,都顯示在當前頁面,簡單的實現第一種頁面。
Html代碼:
<div class="container"> <div class="wrapper"> <div class="page page0 active" data-page="0"> 第一頁 博客園-FlyElephant </div> <div class="page page1" data-page="1"> 第二頁 </div> <div class="page page2" data-page="2"> 第三頁 </div> <div class="page page3" data-page="3"> 第四頁 </div> </div> </div>
頁面樣式:
html, body { height: 100%; padding: 0px; margin: 0px; } .container { height: 100%; overflow: hidden; } .wrapper { height: 100%; touch-action: none; transition: all 1000ms ease; } .page { height: 100%; width: 100%; } .page0 { background: #551A8B; } .page1 { background: #FF8247; } .page2 { background: #CD919E; } .page3 { background: #98FB98; }
鼠標滑動控制代碼,如果需要獲取鼠標的滾輪事件可以直接通過JavaScript,也可以通過query.mousewheel.min.js插件來寫,原生態的JS:
/** This is high-level function. * It must react to delta being more/less than zero. */ function handle(delta) { if (delta < 0) …; else …; } /** Event handler for mouse wheel event. */ function wheel(event){ var delta = 0; if (!event) /* For IE. */ event = window.event; if (event.wheelDelta) { /* IE/Opera. */ delta = event.wheelDelta/120; } else if (event.detail) { /** Mozilla case. */ /** In Mozilla, sign of delta is different than in IE. * Also, delta is multiple of 3. */ delta = -event.detail/3; } /** If delta is nonzero, handle it. * Basically, delta is now positive if wheel was scrolled up, * and negative, if wheel was scrolled down. */ if (delta) handle(delta); /** Prevent default actions caused by mouse wheel. * That might be ugly, but we handle scrolls somehow * anyway, so don't bother here.. */ if (event.preventDefault) event.preventDefault(); event.returnValue = false; } /** Initialization code. * If you use your own event management code, change it as required. */ if (window.addEventListener) /** DOMMouseScroll is for mozilla. */ window.addEventListener('DOMMouseScroll', wheel, false); /** IE/Opera. */ window.onmousewheel = document.onmousewheel = wheel;
通過jQuery插件控制控制滾動的代碼:
<script type="text/javascript"> $(function() { $('.container').on('mousewheel', function(event) { //mac自然狀態向上是-1 //window向上滑動時候是1 向下-1 console.log(event.deltaX, event.deltaY, event.deltaFactor); var currentPage = parseInt($('.active').attr('data-page')); if (event.deltaY > 0) { var prevpage = currentPage - 1; if (prevpage >=0) { $('.page' + prevpage).addClass('active'); $('.page' + currentPage).removeClass('active'); $('.wrapper').css({ 'transform': 'translate(0,' + (prevpage * -100) + '%)' }); } } else { var nextpage = currentPage + 1; if (nextpage < 4) { $('.page' + nextpage).addClass('active'); $('.page' + currentPage).removeClass('active'); $('.wrapper').css({ 'transform': 'translate(0,' + (nextpage * -100) + '%)' }); } } }); }); </script>
關於滾輪的時間的控制,以及不確定頁面元素時候的代碼沒有給出判斷,大體思路不變,其他的僅供參考~