封裝了一個小插件模擬fullPage的全屏滾動效果,比較簡單。javascript
特色:css
1. 純js實現,小巧輕便。html
2. 兼容性好。蘋果、安卓都沒問題,暫時沒遇到問題機型。vue
缺點:java
1. 僅封裝了基礎功能,HTML、css麼有去封裝。我的以爲不封裝更方便你們使用。react
接下來看看效果圖:vuex
相比效果你們都看到了,接下來看看代碼學習
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>移動端滾屏效果</title> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"> <style type="text/css"> body,html{ width: 100%; height: 100%; margin: 0; padding: 0; } .g-fullPage{ width: 100%; height: 100%; overflow: hidden; } .g-fullPage div{ width: 100%; height: 100%; text-align: center; line-height: 100%; transition: 0.5s ease-in; } .g-fullPage div:nth-child(1){ background-color: #D5F1FD; } .g-fullPage div:nth-child(2){ background-color: aquamarine; } .g-fullPage div:nth-child(3){ background-color: mediumseagreen; } </style> </head> <body> <div class="g-fullPage"> <div class="f-pageFirst">1</div> <div>2</div> <div>3</div> </div> </body> <script type="text/javascript"> /* mainClass 滑動父容器類名 firstClass 第一頁的類名 num 總頁數 */ function fullPage(mainClass, firstClass, num) { var startX = 0, //初始橫座標 startY = 0, //初始縱座標 marginTop = 0, //上下滑動變量 touchNum = 0, //上滑極限,是否能夠上滑 touchFlag = true, //可滑動標誌 true 可滑動,false 不可滑 bodyHeight = document.body.offsetHeight, page = document.getElementsByClassName(mainClass)[0], pageFirst = document.getElementsByClassName(firstClass)[0]; //獲取觸摸的初識座標 page.addEventListener("touchstart",function(e){ e.preventDefault(); startX = e.targetTouches[0].clientX; startY = e.targetTouches[0].clientY; }) //重置觸摸的座標值 page.addEventListener("touchend",function(e){ e.preventDefault(); startX = 0; startY = 0; touchFlag = true; }) //監聽並實現 上、下 滑動效果 page.addEventListener("touchmove",function(e){ e.preventDefault(); var newX = e.targetTouches[0].clientX, newY = e.targetTouches[0].clientY; if (newY - startY > 50) { if (touchFlag == true && touchNum > 0) { console.log("下滑"); touchFlag = false; marginTop += 1; touchNum -= 1; pageFirst.style.marginTop = marginTop * bodyHeight+"px"; } } else if (newY - startY < -50) { if (touchFlag == true && marginTop > -num+1) { console.log("上滑"); touchFlag = false; marginTop -= 1; touchNum += 1; pageFirst.style.marginTop = marginTop * bodyHeight+"px"; } } }) } fullPage("g-fullPage", "f-pageFirst",3); </script> </html>
很簡單的一個功能,如今簡略解釋一下代碼:spa
1. 監聽 touchstart ,獲取觸摸初始座標; 監聽 touchmove,獲取活動過程當中的觸摸點座標,兩者作差. >0 下滑;<0 上滑插件
2. 當滑動縱座標差值超過50 ,調節div的 marginTop,顯示不一樣div內容
這裏面有幾個注意點:
1. margin、top等樣式,若是寫在樣式表裏,js獲取不到,能取到兼容性也很差。具體緣由這裏不細說了。可是內聯樣式能夠取到。 這裏僅作提醒,避免同志們入坑。
2. 記得阻止默認事件。
好啦,我的能力有限,若代碼有問題,但願道友們指出,咱們共同窗習。 喜歡個人博客的朋友能夠關注我,近期會出幾篇 vue2.0+vuex 的博客(react的也會有,具體看時間啦),有須要的能夠過來看看吆!