摘要:最近項(xiàng)目要求增加一個(gè)下拉刷新的功能,自己也試著寫了一個(gè),單總是有點(diǎn)卡頓。
最近項(xiàng)目要求增加一個(gè)下拉刷新的功能,自己也試著寫了一個(gè),單總是有點(diǎn)卡頓。 于是學(xué)習(xí)了下別人的插件(ps : 既然寫不出好插件,就要會(huì)學(xué)習(xí)別人的):
官網(wǎng)github地址:https://github.com/mescroll/m...
1.整體預(yù)發(fā)結(jié)構(gòu);(function(name, definition) { // 檢測上下文環(huán)境是否為AMD或CMD })("MeScroll", function() {//scroll的邏輯代碼 //構(gòu)造函數(shù) var MeScroll = function(){ //初始化下拉刷新 me.initDownScroll(); //初始化上拉加載,則初始化 me.initUpScroll(); //自動(dòng)加載 } /*配置參數(shù):下拉刷新*/ MeScroll.prototype.extendDownScroll = function(){} /*配置參數(shù):上拉加載*/ MeScroll.prototype.extendUpScroll = function(){} /*配置參數(shù)*/ MeScroll.extend = function(){} /*-------初始化下拉刷新-------*/ MeScroll.prototype.initDownScroll = function(){} /*-------初始化上拉加載-------*/ MeScroll.prototype.initUpScroll = function(){} //...其他函數(shù)掛在prototype的函數(shù),用于初始化時(shí)候調(diào)用或者暴露給客戶端定義; })2. 檢查環(huán)境
;(function(name, definition) { // 檢測上下文環(huán)境是否為AMD或CMD var hasDefine = typeof define === "function", // 檢查上下文環(huán)境是否為Node hasExports = typeof module !== "undefined" && module.exports; if(hasDefine) { // AMD環(huán)境或CMD環(huán)境 define(definition); } else if(hasExports) { // 定義為普通Node模塊 module.exports = definition(); } else { // 將模塊的執(zhí)行結(jié)果掛在window變量中,在瀏覽器中this指向window對象 this[name] = definition(); } })("MeScroll", function() {//scroll的邏輯代碼})3.檢查設(shè)備
var u = navigator.userAgent; var isIOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/); //是否為ios設(shè)備 var isPC = typeof window.orientation == "undefined"; //是否為PC端 var isAndroid = u.indexOf("Android") > -1 || u.indexOf("Adr") > -1;; //是否為android端4.對象合并方法
/*配置參數(shù)*/ 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.獲取手指的坐標(biāo)
/*根據(jù)點(diǎn)擊滑動(dòng)事件獲取第一個(gè)手指的坐標(biāo)*/ 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; //和起點(diǎn)比,移動(dòng)的距離,大于0向下拉,小于0向上拉7.和滾動(dòng)條有關(guān)的一些的方法
/*滾動(dòng)條的位置*/ MeScroll.prototype.getScrollTop = function() { if(this.isScrollBody) { return document.documentElement.scrollTop || document.body.scrollTop; } else { return this.scrollDom.scrollTop; } } /*滾動(dòng)條到底部的距離:滾動(dòng)內(nèi)容的高度 - 滾動(dòng)容器的高度 - 滾動(dòng)條頂部的高度*/ MeScroll.prototype.getToBottom = function() { return this.getScrollHeight() - this.getClientHeight() - this.getScrollTop(); } /*設(shè)置滾動(dòng)條的位置*/ MeScroll.prototype.setScrollTop = function(y) { if(this.isScrollBody) { document.documentElement.scrollTop = y; document.body.scrollTop = y; } else { this.scrollDom.scrollTop = y; } }8.初始化下拉刷新
//1.配置參數(shù) me.optDown = me.options.down || {}; //具體參數(shù)配置 me.extendDownScroll(me.optDown); //2.鼠標(biāo)或手指的按下事件 me.touchstartEvent = function(){} me.scrollDom.addEventListener("mousedown", me.touchstartEvent); //PC端鼠標(biāo)事件 me.scrollDom.addEventListener("touchstart", me.touchstartEvent); //移動(dòng)端手指事件 //3.鼠標(biāo)或手指的滑動(dòng)事件 me.touchmoveEvent = function(){} me.scrollDom.addEventListener("touchmove", me.touchmoveEvent); //移動(dòng)端手指事件 //4.鼠標(biāo)或手指的離開事件 me.touchendEvent = function(){} me.scrollDom.addEventListener("mouseup", me.touchendEvent); //PC端鼠標(biāo)抬起事件 me.scrollDom.addEventListener("mouseleave", me.touchendEvent); //PC端鼠標(biāo)離開事件 me.scrollDom.addEventListener("touchend", me.touchendEvent); //移動(dòng)端手指事件 me.scrollDom.addEventListener("touchcancel", me.touchendEvent); //移動(dòng)端系統(tǒng)停止跟蹤觸摸 //5.在頁面中加入下拉布局9.初始化上拉加載
//1.配置參數(shù) //2.滾動(dòng)監(jiān)聽 me.scrollEvent = function() {} if(me.isScrollBody) { window.addEventListener("scroll", me.scrollEvent); } else { me.scrollDom.addEventListener("scroll", me.scrollEvent); }10.css相關(guān)
/*啟用硬件加速:使動(dòng)畫渲染流暢,解決部分手機(jī)閃白屏問題,在下拉刷新和上拉加載觸發(fā)時(shí)啟用,結(jié)束后移除,避免濫用導(dǎo)致其他兼容性問題*/ .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:{}, //... } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/52735.html
摘要:最近項(xiàng)目要求增加一個(gè)下拉刷新的功能,自己也試著寫了一個(gè),單總是有點(diǎn)卡頓。 最近項(xiàng)目要求增加一個(gè)下拉刷新的功能,自己也試著寫了一個(gè),單總是有點(diǎn)卡頓。 于是學(xué)習(xí)了下別人的插件(ps : 既然寫不出好插件,就要會(huì)學(xué)習(xí)別人的): 官網(wǎng)github地址:https://github.com/mescroll/m... 1.整體預(yù)發(fā)結(jié)構(gòu) ;(function(name, definition) {...
摘要:做一個(gè)簡單的移動(dòng)端展示項(xiàng)目,后臺(tái)分頁后前端加載,實(shí)現(xiàn)上拉加載下一頁,找了下,還是用這個(gè)插件好一點(diǎn)安裝不要使用安裝導(dǎo)入在哪個(gè)頁面使用則在哪個(gè)頁面導(dǎo)入這里的話,我使用全局導(dǎo)入會(huì)出現(xiàn)問題若有錯(cuò)還請大家指出暫時(shí)想到的就是局部引入注冊組件注冊組件 做一個(gè)簡單的移動(dòng)端展示項(xiàng)目,后臺(tái)分頁后前端加載,實(shí)現(xiàn)上拉加載下一頁,找了下,還是用這個(gè)mescroll.js插件好一點(diǎn) 1.npm安裝 npm ins...
摘要:前言現(xiàn)在網(wǎng)上下拉刷新,上拉加載插件一搜一大堆,如果你想用在生產(chǎn)環(huán)境,那你可以直接網(wǎng)上搜一個(gè)靠譜的,我所做的就是不依賴任何插件,一步一步把這個(gè)插件的過程寫一下,各位同學(xué)可以在此基礎(chǔ)上定制,沒有寫過插件的,可以了解下插件怎么寫的,整個(gè)過程定位入 前言 現(xiàn)在網(wǎng)上 下拉刷新,上拉加載 插件一搜一大堆,如果你想用在生產(chǎn)環(huán)境,那你可以直接網(wǎng)上搜一個(gè)靠譜的,我所做的就是不依賴任何插件,一步一步把這個(gè)...
摘要:前言現(xiàn)在網(wǎng)上下拉刷新,上拉加載插件一搜一大堆,如果你想用在生產(chǎn)環(huán)境,那你可以直接網(wǎng)上搜一個(gè)靠譜的,我所做的就是不依賴任何插件,一步一步把這個(gè)插件的過程寫一下,各位同學(xué)可以在此基礎(chǔ)上定制,沒有寫過插件的,可以了解下插件怎么寫的,整個(gè)過程定位入 前言 現(xiàn)在網(wǎng)上 下拉刷新,上拉加載 插件一搜一大堆,如果你想用在生產(chǎn)環(huán)境,那你可以直接網(wǎng)上搜一個(gè)靠譜的,我所做的就是不依賴任何插件,一步一步把這個(gè)...
閱讀 2135·2021-10-14 09:43
閱讀 2197·2019-08-30 15:55
閱讀 726·2019-08-30 14:23
閱讀 2019·2019-08-30 13:21
閱讀 1235·2019-08-30 12:50
閱讀 2199·2019-08-29 18:46
閱讀 2280·2019-08-29 17:28
閱讀 2359·2019-08-29 17:21