摘要:現(xiàn)在我們用原生的實現(xiàn)這個非常簡單的下拉刷新功能。二封裝下拉刷新的功能模塊首先創(chuàng)建一個構(gòu)造函數(shù),用來初始化屬性與函數(shù)。和下拉刷新這個兩個子節(jié)點。的效果顯示出來,同時隱藏下拉刷新的效果開始刷新這里是模擬秒后刷新成功,然后隱藏正在刷新。。
前言:
我們在瀏覽移動端web頁面的時候,經(jīng)常會用到下拉刷新。 現(xiàn)在我們用原生的js實現(xiàn)這個非常簡單的下拉刷新功能。
(溫馨提示:本文比較基礎(chǔ),功能也很簡單。寫的不好的地方,希望大神提點一二。)
一、創(chuàng)建簡單的html頁面:
假設(shè)代碼里的float-box是一個主頁面。
二、封裝下拉刷新的功能模塊:
(1)首先創(chuàng)建一個Slide構(gòu)造函數(shù),用來初始化屬性與函數(shù)。 function Slide(dom){ this.start_y=null;//手指滑動屏幕的初始位置 this.end_y=null;//手指滑動屏幕的結(jié)束位置 this.render(dom);//初始化下拉功能的render函數(shù),這里的dom參數(shù)是你的主頁面。 } (2)編寫render函數(shù) render函數(shù)是用來動態(tài)創(chuàng)建下拉刷新的動畫圖。現(xiàn)在我們在Slide原型上編寫render函數(shù)。 Slide.prototype={ render:function(dom){ //拿到body節(jié)點 var body = document.getElementsByTagName("body"); //創(chuàng)建div,用來顯示下拉效果。這個div有"正在刷新。。" 和 "下拉刷新" 這個兩個子節(jié)點。 var newItem = document.createElement("div"); //給div設(shè)置class屬性,該class是下拉效果的樣式 newItem.className = "slide-wrap"; //利用innerHTML將 "正在刷新。。。" 和 "下拉刷新" 這兩個子節(jié)點插入到上面創(chuàng)建的div中。 newItem.innerHTML = ""+"下拉刷新"; //然后將創(chuàng)建的div插入到主頁面的前面 body[0].insertBefore(newItem,dom[0]); //獲取創(chuàng)建完成的下拉刷新div var dom2 = document.getElementsByClassName("slide-wrap"); //運(yùn)行slide_start() this.slide_start(dom2); }}
下圖為下拉刷新的css樣式:
(3)編寫slide_start()函數(shù)
slide_start:function(dom2){ var _this = this; //監(jiān)聽document整個文檔的touchstart事件 document.addEventListener("touchstart",function(evt){ var touch = evt.touches[0]; //獲取第一個觸點 _this.start_y = Number(touch.pageY);//第一個觸點的Y坐標(biāo) }); //運(yùn)行slide_move _this.slide_move(dom2); }
(4)編寫slide_move()函數(shù)
slide_move:function(dom2){ var _this = this; //監(jiān)聽document的touchmove事件 document.addEventListener("touchmove",function(evt){ //下面這一行代碼是保證在手指移動的距離還不到規(guī)定的長度時候,就不顯示 "正在刷新。。" dom2[0].childNodes[0].style.display="none"; var touch = evt.touches[0]; //獲取第一個觸點 //獲取手指向下移動的長度距離 _this.end_y = Number(touch.pageY) - _this.start_y; //判斷手指移動距離是否大于5.這個為什么設(shè)置為5,而不是0呢,主要是為了避免用戶不覺意的輕微滑動 if(_this.end_y > 5){ //當(dāng)滑動距離大于5時,將 ‘下拉刷新’ 的效果顯示出來,同時將它的高度賦值為手指滑動的距離,以達(dá)到慢慢下拉的效果 dom2[0].childNodes[1].style.display = "block"; dom2[0].childNodes[1].style.height = _this.end_y +"px"; dom2[0].childNodes[1].style.lineHeight = _this.end_y +"px"; } }); //執(zhí)行slide_end()函數(shù) this.slide_end(dom2); }
(5)編寫slide_end()函數(shù)
slide_end:function(dom2){ var _this = this; //監(jiān)聽touchend事件 document.addEventListener("touchend",function(evt){ //當(dāng)手指送開的時候,判斷手指的滑動距離如果大于100就將 "正在刷新。。" 的效果顯示出來,同時隱藏 "下拉刷新" 的效果 if(_this.end_y > 100){ dom2[0].childNodes[1].style.display="none"; dom2[0].childNodes[0].style.display="block"; console.log("開始刷新"); //這里是模擬3秒后刷新成功,然后隱藏 "正在刷新。。" 效果 setTimeout(function(){ dom2[0].childNodes[0].style.display="none"; },3000); }else{ //這里是當(dāng)手指滑動距離小于100時,就將 "下拉刷新" 效果隱藏。也就是什么也不做 dom2[0].childNodes[1].style.display = "none"; } }); }
(5)最后將Slide構(gòu)造函數(shù)暴露到全局window里:
window.Slide=Slide;
整個下刷新功能到這了就完了。很簡單吧。
下面是完整的封裝代碼。
;(function(){
function Slide(dom){ this.start_y=null; this.end_y=null; this.render(dom); } Slide.prototype={ // 動態(tài)創(chuàng)建下拉刷新特效 render:function(dom){ var body = document.getElementsByTagName("body"); var newItem = document.createElement("div"); newItem.className = "slide-wrap"; newItem.innerHTML = ""+"下拉刷新"; body[0].insertBefore(newItem,dom[0]); var dom2 = document.getElementsByClassName("slide-wrap"); this.slide_start(dom2); }, slide_start:function(dom2){ var _this = this; document.addEventListener("touchstart",function(evt){ var touch = evt.touches[0]; //獲取第一個觸點 _this.start_y = Number(touch.pageY); }); _this.slide_move(dom2); }, slide_move:function(dom2){ var _this = this; document.addEventListener("touchmove",function(evt){ dom2[0].childNodes[0].style.display="none"; var touch = evt.touches[0]; //獲取第一個觸點 _this.end_y = Number(touch.pageY) - _this.start_y; if(_this.end_y > 5){ dom2[0].childNodes[1].style.display = "block"; dom2[0].childNodes[1].style.height = _this.end_y +"px"; dom2[0].childNodes[1].style.lineHeight = _this.end_y +"px"; } }); this.slide_end(dom2); }, slide_end:function(dom2){ var _this = this; document.addEventListener("touchend",function(evt){ if(_this.end_y > 100){ dom2[0].childNodes[1].style.display="none"; dom2[0].childNodes[0].style.display="block"; console.log("開始刷新"); setTimeout(function(){ dom2[0].childNodes[0].style.display="none"; },3000); }else{ dom2[0].childNodes[1].style.display = "none"; } }); } }
window.Slide=Slide;
})();
使用方法也很簡單:在你的頁面里new一個Slide()。并且將主頁面的dom節(jié)點傳進(jìn)去即可。
var target = document.getElementsByClassName("float-box");
new Slide(target);
最后的效果如下圖:
持續(xù)下拉的效果:
松開手指,正在刷新的效果:
當(dāng)然,這效果是很丑,因為只是個小demo,所以css樣式非常簡單。你們可以自己發(fā)揮想象力,寫更好看的css樣式即可。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/52053.html
摘要:現(xiàn)在我們用原生的實現(xiàn)這個非常簡單的下拉刷新功能。二封裝下拉刷新的功能模塊首先創(chuàng)建一個構(gòu)造函數(shù),用來初始化屬性與函數(shù)。和下拉刷新這個兩個子節(jié)點。的效果顯示出來,同時隱藏下拉刷新的效果開始刷新這里是模擬秒后刷新成功,然后隱藏正在刷新。。 前言: 我們在瀏覽移動端web頁面的時候,經(jīng)常會用到下拉刷新。 現(xiàn)在我們用原生的js實現(xiàn)這個非常簡單的下拉刷新功能。 (溫馨提示:本文比較基礎(chǔ),功能也很簡...
摘要:現(xiàn)在我們用原生的實現(xiàn)這個非常簡單的下拉刷新功能。二封裝下拉刷新的功能模塊首先創(chuàng)建一個構(gòu)造函數(shù),用來初始化屬性與函數(shù)。和下拉刷新這個兩個子節(jié)點。的效果顯示出來,同時隱藏下拉刷新的效果開始刷新這里是模擬秒后刷新成功,然后隱藏正在刷新。。 前言: 我們在瀏覽移動端web頁面的時候,經(jīng)常會用到下拉刷新。 現(xiàn)在我們用原生的js實現(xiàn)這個非常簡單的下拉刷新功能。 (溫馨提示:本文比較基礎(chǔ),功能也很簡...
摘要:最近開始接觸了小程序的開發(fā),由于時間問題,文檔閱讀的并不完備,也踩了很多坑。的使用微信小程序不支持原生頁面跳轉(zhuǎn),包括和,若要跳轉(zhuǎn)小程序應(yīng)用內(nèi)頁面,需要使用,詳見。參考文獻(xiàn)微信小程序開發(fā)者文檔 最近開始接觸了小程序的開發(fā),由于時間問題,文檔閱讀的并不完備,也踩了很多坑。不得不說,微信的野心真是越來越大了,但是它超高的流量注定了它有這個資本。 原文地址:mini programs 目...
摘要:最近開始接觸了小程序的開發(fā),由于時間問題,文檔閱讀的并不完備,也踩了很多坑。的使用微信小程序不支持原生頁面跳轉(zhuǎn),包括和,若要跳轉(zhuǎn)小程序應(yīng)用內(nèi)頁面,需要使用,詳見。參考文獻(xiàn)微信小程序開發(fā)者文檔 最近開始接觸了小程序的開發(fā),由于時間問題,文檔閱讀的并不完備,也踩了很多坑。不得不說,微信的野心真是越來越大了,但是它超高的流量注定了它有這個資本。 原文地址:mini programs 目...
閱讀 2702·2023-04-25 14:59
閱讀 889·2021-11-22 11:59
閱讀 635·2021-11-17 09:33
閱讀 2468·2021-09-27 13:34
閱讀 3898·2021-09-09 11:55
閱讀 2321·2019-08-30 15:44
閱讀 1123·2019-08-30 14:06
閱讀 1925·2019-08-29 16:55