摘要:最近項目要求增加一個下拉刷新的功能,自己也試著寫了一個,單總是有點卡頓。
最近項目要求增加一個下拉刷新的功能,自己也試著寫了一個,單總是有點卡頓。 于是學習了下別人的插件(ps : 既然寫不出好插件,就要會學習別人的):
官網github地址:https://github.com/mescroll/m...
1.整體預發結構;(function(name, definition) { // 檢測上下文環境是否為AMD或CMD })("MeScroll", function() {//scroll的邏輯代碼 //構造函數 var MeScroll = function(){ //初始化下拉刷新 me.initDownScroll(); //初始化上拉加載,則初始化 me.initUpScroll(); //自動加載 } /*配置參數:下拉刷新*/ MeScroll.prototype.extendDownScroll = function(){} /*配置參數:上拉加載*/ MeScroll.prototype.extendUpScroll = function(){} /*配置參數*/ MeScroll.extend = function(){} /*-------初始化下拉刷新-------*/ MeScroll.prototype.initDownScroll = function(){} /*-------初始化上拉加載-------*/ MeScroll.prototype.initUpScroll = function(){} //...其他函數掛在prototype的函數,用于初始化時候調用或者暴露給客戶端定義; })2. 檢查環境
;(function(name, definition) { // 檢測上下文環境是否為AMD或CMD var hasDefine = typeof define === "function", // 檢查上下文環境是否為Node hasExports = typeof module !== "undefined" && module.exports; if(hasDefine) { // AMD環境或CMD環境 define(definition); } else if(hasExports) { // 定義為普通Node模塊 module.exports = definition(); } else { // 將模塊的執行結果掛在window變量中,在瀏覽器中this指向window對象 this[name] = definition(); } })("MeScroll", function() {//scroll的邏輯代碼})3.檢查設備
var u = navigator.userAgent; var isIOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/); //是否為ios設備 var isPC = typeof window.orientation == "undefined"; //是否為PC端 var isAndroid = u.indexOf("Android") > -1 || u.indexOf("Adr") > -1;; //是否為android端4.對象合并方法
/*配置參數*/ MeScroll.extend = function(userOption, defaultOption) { if(!userOption) return defaultOption; for(var key in defaultOption) { if(userOption[key] == null) { userOption[key] = defaultOption[key]; } else if(typeof userOption[key] == "object") { MeScroll.extend(userOption[key], defaultOption[key]); //深度匹配 } } return userOption; }5.獲取手指的坐標
/*根據點擊滑動事件獲取第一個手指的坐標*/ MeScroll.prototype.getPoint = function(e) { return { x: e.touches ? e.touches[0].pageX : e.clientX, y: e.touches ? e.touches[0].pageY : e.clientY } }6.判斷向上拉還是向下拉
var moveY = curPoint.y - me.startPoint.y; //和起點比,移動的距離,大于0向下拉,小于0向上拉7.和滾動條有關的一些的方法
/*滾動條的位置*/ MeScroll.prototype.getScrollTop = function() { if(this.isScrollBody) { return document.documentElement.scrollTop || document.body.scrollTop; } else { return this.scrollDom.scrollTop; } } /*滾動條到底部的距離:滾動內容的高度 - 滾動容器的高度 - 滾動條頂部的高度*/ MeScroll.prototype.getToBottom = function() { return this.getScrollHeight() - this.getClientHeight() - this.getScrollTop(); } /*設置滾動條的位置*/ MeScroll.prototype.setScrollTop = function(y) { if(this.isScrollBody) { document.documentElement.scrollTop = y; document.body.scrollTop = y; } else { this.scrollDom.scrollTop = y; } }8.初始化下拉刷新
//1.配置參數 me.optDown = me.options.down || {}; //具體參數配置 me.extendDownScroll(me.optDown); //2.鼠標或手指的按下事件 me.touchstartEvent = function(){} me.scrollDom.addEventListener("mousedown", me.touchstartEvent); //PC端鼠標事件 me.scrollDom.addEventListener("touchstart", me.touchstartEvent); //移動端手指事件 //3.鼠標或手指的滑動事件 me.touchmoveEvent = function(){} me.scrollDom.addEventListener("touchmove", me.touchmoveEvent); //移動端手指事件 //4.鼠標或手指的離開事件 me.touchendEvent = function(){} me.scrollDom.addEventListener("mouseup", me.touchendEvent); //PC端鼠標抬起事件 me.scrollDom.addEventListener("mouseleave", me.touchendEvent); //PC端鼠標離開事件 me.scrollDom.addEventListener("touchend", me.touchendEvent); //移動端手指事件 me.scrollDom.addEventListener("touchcancel", me.touchendEvent); //移動端系統停止跟蹤觸摸 //5.在頁面中加入下拉布局9.初始化上拉加載
//1.配置參數 //2.滾動監聽 me.scrollEvent = function() {} if(me.isScrollBody) { window.addEventListener("scroll", me.scrollEvent); } else { me.scrollDom.addEventListener("scroll", me.scrollEvent); }10.css相關
/*啟用硬件加速:使動畫渲染流暢,解決部分手機閃白屏問題,在下拉刷新和上拉加載觸發時啟用,結束后移除,避免濫用導致其他兼容性問題*/ .mescroll-hardware { -webkit-transform: translateZ(0); -webkit-transform-style: preserve-3d; -webkit-backface-visibility: hidden; -webkit-perspective: 1000; }11.注冊為vue插件
具體注冊插件方法可以參考vue插件文檔:
https://cn.vuejs.org/v2/guide...
MeScroll.install = function(Vue,options){ Vue.component("MeScroll",{ template:"", data: , props: , mounted: , methods:{}, //... } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/108120.html
摘要:最近項目要求增加一個下拉刷新的功能,自己也試著寫了一個,單總是有點卡頓。 最近項目要求增加一個下拉刷新的功能,自己也試著寫了一個,單總是有點卡頓。 于是學習了下別人的插件(ps : 既然寫不出好插件,就要會學習別人的): 官網github地址:https://github.com/mescroll/m... 1.整體預發結構 ;(function(name, definition) {...
摘要:做一個簡單的移動端展示項目,后臺分頁后前端加載,實現上拉加載下一頁,找了下,還是用這個插件好一點安裝不要使用安裝導入在哪個頁面使用則在哪個頁面導入這里的話,我使用全局導入會出現問題若有錯還請大家指出暫時想到的就是局部引入注冊組件注冊組件 做一個簡單的移動端展示項目,后臺分頁后前端加載,實現上拉加載下一頁,找了下,還是用這個mescroll.js插件好一點 1.npm安裝 npm ins...
摘要:前言現在網上下拉刷新,上拉加載插件一搜一大堆,如果你想用在生產環境,那你可以直接網上搜一個靠譜的,我所做的就是不依賴任何插件,一步一步把這個插件的過程寫一下,各位同學可以在此基礎上定制,沒有寫過插件的,可以了解下插件怎么寫的,整個過程定位入 前言 現在網上 下拉刷新,上拉加載 插件一搜一大堆,如果你想用在生產環境,那你可以直接網上搜一個靠譜的,我所做的就是不依賴任何插件,一步一步把這個...
摘要:前言現在網上下拉刷新,上拉加載插件一搜一大堆,如果你想用在生產環境,那你可以直接網上搜一個靠譜的,我所做的就是不依賴任何插件,一步一步把這個插件的過程寫一下,各位同學可以在此基礎上定制,沒有寫過插件的,可以了解下插件怎么寫的,整個過程定位入 前言 現在網上 下拉刷新,上拉加載 插件一搜一大堆,如果你想用在生產環境,那你可以直接網上搜一個靠譜的,我所做的就是不依賴任何插件,一步一步把這個...
閱讀 2512·2023-04-25 22:09
閱讀 1024·2021-11-17 17:01
閱讀 1562·2021-09-04 16:45
閱讀 2621·2021-08-03 14:02
閱讀 819·2019-08-29 17:11
閱讀 3257·2019-08-29 12:23
閱讀 1092·2019-08-29 11:10
閱讀 3281·2019-08-26 13:48