成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

記微信網(wǎng)頁(yè)開(kāi)發(fā)單頁(yè)面返回不刷新的實(shí)現(xiàn)

cuieney / 1189人閱讀

摘要:使用語(yǔ)法與要跳轉(zhuǎn)到的對(duì)應(yīng)的狀態(tài)信息。頁(yè)面名字,方便調(diào)試。要跳轉(zhuǎn)到的地址,不能跨域,對(duì)于單頁(yè)應(yīng)用來(lái)說(shuō)沒(méi)用,傳空即可。

需求

在微信網(wǎng)頁(yè)開(kāi)發(fā)中,點(diǎn)擊返回按鈕不刷新頁(yè)面,進(jìn)行頁(yè)面切換,且實(shí)現(xiàn)"傳值"功能.

問(wèn)題由來(lái)

在做微信網(wǎng)頁(yè)開(kāi)發(fā)時(shí),由于微信的左上角返回按鈕會(huì)返回上一個(gè)頁(yè)面并且刷新,無(wú)法做成打開(kāi)頁(yè)面選擇內(nèi)容后關(guān)閉當(dāng)前頁(yè)面,并且給前一個(gè)頁(yè)面?zhèn)髦档墓δ?

實(shí)現(xiàn)方法

想實(shí)現(xiàn)此功能一開(kāi)始想到的是不進(jìn)行頁(yè)面跳轉(zhuǎn)了,把選擇內(nèi)容的頁(yè)面也做在當(dāng)前頁(yè)面里,然后使用js來(lái)控制顯隱.

// 點(diǎn)擊修改學(xué)校按鈕
document.querySelector(".em-school-right").addEventListener("tap", function() {
    document.querySelector(".em-sign").classList.add("mui-hidden");
    document.querySelector(".em-address").classList.remove("mui-hidden");
})

在微信實(shí)際頁(yè)面中,由于整頁(yè)顯示,用戶會(huì)點(diǎn)擊到左上角返回按鈕,會(huì)造成關(guān)閉頁(yè)面.

需要對(duì)返回按鈕進(jìn)行一些操作來(lái)修改返回后的效果.

pushState

history提供了一個(gè)方法pushState,可以手動(dòng)的添加頁(yè)面進(jìn)棧。

使用語(yǔ)法:

history.pushState(state, title, url);
state:Object,與要跳轉(zhuǎn)到的URL對(duì)應(yīng)的狀態(tài)信息。
title:頁(yè)面名字,方便調(diào)試。
url:要跳轉(zhuǎn)到的URL地址,不能跨域,對(duì)于單頁(yè)應(yīng)用來(lái)說(shuō)沒(méi)用,傳空即可。

修改點(diǎn)擊事件

// 點(diǎn)擊修改學(xué)校按鈕
document.querySelector(".em-school-right").addEventListener("tap", function() {
    document.querySelector(".em-sign").classList.add("mui-hidden");
    document.querySelector(".em-address").classList.remove("mui-hidden");
    // 歷史記錄中插入一條記錄,防止微信返回按鈕會(huì)關(guān)閉頁(yè)面
    var state = {
        title: "選擇學(xué)校",
        url: "#school" // 這個(gè)url可以隨便填,只是為了不讓瀏覽器顯示的url地址發(fā)生變化,對(duì)頁(yè)面其實(shí)無(wú)影響
    };
    window.history.pushState(state, state.title, state.url);
})
onpopstate

history.go和history.back(包括用戶按瀏覽器歷史前進(jìn)后退按鈕)觸發(fā),并且頁(yè)面無(wú)刷的時(shí)候(由于使用pushState修改了history)會(huì)觸發(fā)popstate事件,事件發(fā)生時(shí)瀏覽器會(huì)從history中取出URL和對(duì)應(yīng)的state對(duì)象替換當(dāng)前的URL和history.state

對(duì)返回按鈕添加監(jiān)聽(tīng)

// 添加微信返回前進(jìn)事件監(jiān)聽(tīng)
window.addEventListener("popstate", function(e) {
    // 選擇地址頁(yè)面隱藏
    document.querySelector(".em-address").classList.add("mui-hidden");
    // 簽到頁(yè)面顯示
    document.querySelector(".em-sign").classList.remove("mui-hidden");
}, false);

此時(shí)進(jìn)入選擇地址頁(yè)面后,點(diǎn)擊返回按鈕,能實(shí)現(xiàn)頁(yè)面切換

選擇學(xué)校后也要實(shí)現(xiàn)該操作,用 history.go(-1);實(shí)現(xiàn)手動(dòng)去除歷史記錄中添加的記錄

// 選擇學(xué)校
mui("#choose-school").on("tap", "li", function() {
    var schoolName = this.querySelector(".em-left-name").innerText;
    var schoolAddress = this.querySelector(".em-left-address").innerText;
    document.querySelector(".em-left-name").innerText = schoolName;
    document.querySelector(".em-left-address").innerText = schoolAddress;

    // 手動(dòng)去除歷史記錄中插入的記錄
    history.go(-1);
    // 選擇地址頁(yè)面隱藏
    document.querySelector(".em-address").classList.add("mui-hidden");
    // 簽到頁(yè)面顯示
    document.querySelector(".em-sign").classList.remove("mui-hidden");
})

修改完善代碼,實(shí)現(xiàn)后退,前進(jìn)功能

/**
 * @description 初始化監(jiān)聽(tīng)
 */
initListeners: function() {
    var self = this;

    // 添加微信返回前進(jìn)事件監(jiān)聽(tīng)
    window.addEventListener("popstate", function(e) {
    //處于選擇學(xué)校頁(yè)面
    if(self.chooseSchool) {
        // 選擇地址頁(yè)面隱藏
        document.querySelector(".em-address").classList.add("mui-hidden");
        // 簽到頁(yè)面顯示
        document.querySelector(".em-sign").classList.remove("mui-hidden");
    }
    
    // 頁(yè)面前進(jìn)后如果為選擇學(xué)校頁(yè)面
    if(/#school/.test(window.location.href)){
        self.chooseSchool = true;
        document.querySelector(".em-sign").classList.add("mui-hidden");
        document.querySelector(".em-address").classList.remove("mui-hidden");
    }

}, false);


// 點(diǎn)擊修改學(xué)校按鈕
document.querySelector(".em-school-right").addEventListener("tap", function() {
    self.chooseSchool = true;
    document.querySelector(".em-sign").classList.add("mui-hidden");
    document.querySelector(".em-address").classList.remove("mui-hidden");

    // 歷史記錄中插入一條記錄,防止微信返回按鈕會(huì)關(guān)閉頁(yè)面
    var state = {
        title: "選擇學(xué)校",
        url: "#school" // 這個(gè)url可以隨便填,只是為了不讓瀏覽器顯示的url地址發(fā)生變化,對(duì)頁(yè)面其實(shí)無(wú)影響
    };
    window.history.pushState(state, state.title, state.url);
})

// 選擇學(xué)校
mui("#choose-school").on("tap", "li", function() {
    self.chooseSchool = false;
    var schoolName = this.querySelector(".em-left-name").innerText;
    var schoolAddress = this.querySelector(".em-left-address").innerText;
    document.querySelector(".em-left-name").innerText = schoolName;
    document.querySelector(".em-left-address").innerText = schoolAddress;

    // 手動(dòng)去除歷史記錄中插入的記錄
    history.go(-1);
    // 選擇地址頁(yè)面隱藏
    document.querySelector(".em-address").classList.add("mui-hidden");
    // 簽到頁(yè)面顯示
    document.querySelector(".em-sign").classList.remove("mui-hidden");
})
}
實(shí)現(xiàn)效果

感覺(jué)通過(guò)這些操作實(shí)現(xiàn)了簡(jiǎn)單的頁(yè)面路由的功能,適用于不是特別復(fù)雜的頁(yè)面切換選擇

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/93633.html

相關(guān)文章

  • 徹底理清前端頁(yè)面應(yīng)用(SPA)實(shí)現(xiàn)原理 【精讀源碼】

    showImg(https://segmentfault.com/img/bVbvOmp?w=1612&h=888); 隨著React Vue前端框架的興起,出現(xiàn)了Vue-router,react-router-dom等前端路由管理庫(kù),利用他們構(gòu)建出來(lái)的單頁(yè)面應(yīng)用,也是越來(lái)越接近原生的體驗(yàn),再也不是以前的點(diǎn)擊標(biāo)簽跳轉(zhuǎn)頁(yè)面,刷新整個(gè)頁(yè)面了,那么他們的原理是什么呢? 優(yōu)質(zhì)gitHub開(kāi)源練手項(xiàng)目: ...

    xiaodao 評(píng)論0 收藏0
  • 徹底理清前端頁(yè)面應(yīng)用(SPA)實(shí)現(xiàn)原理 【精讀源碼】

    showImg(https://segmentfault.com/img/bVbvOmp?w=1612&h=888); 隨著React Vue前端框架的興起,出現(xiàn)了Vue-router,react-router-dom等前端路由管理庫(kù),利用他們構(gòu)建出來(lái)的單頁(yè)面應(yīng)用,也是越來(lái)越接近原生的體驗(yàn),再也不是以前的點(diǎn)擊標(biāo)簽跳轉(zhuǎn)頁(yè)面,刷新整個(gè)頁(yè)面了,那么他們的原理是什么呢? 優(yōu)質(zhì)gitHub開(kāi)源練手項(xiàng)目: ...

    崔曉明 評(píng)論0 收藏0
  • 徹底理清前端頁(yè)面應(yīng)用(SPA)實(shí)現(xiàn)原理 【精讀源碼】

    showImg(https://segmentfault.com/img/bVbvOmp?w=1612&h=888); 隨著React Vue前端框架的興起,出現(xiàn)了Vue-router,react-router-dom等前端路由管理庫(kù),利用他們構(gòu)建出來(lái)的單頁(yè)面應(yīng)用,也是越來(lái)越接近原生的體驗(yàn),再也不是以前的點(diǎn)擊標(biāo)簽跳轉(zhuǎn)頁(yè)面,刷新整個(gè)頁(yè)面了,那么他們的原理是什么呢? 優(yōu)質(zhì)gitHub開(kāi)源練手項(xiàng)目: ...

    sunny5541 評(píng)論0 收藏0
  • 網(wǎng)頁(yè)程序遷移至微信小程序web-view詳解

    摘要:網(wǎng)頁(yè)引入網(wǎng)頁(yè)發(fā)起支付由后臺(tái)返回,主要是需要統(tǒng)一下單平臺(tái)的微信支付頁(yè)面支付參數(shù)錯(cuò)誤,請(qǐng)稍后重試支付成功支付失敗支付錯(cuò)誤分享功能小程序直接分享的所在的頁(yè)面,如果需要加上頁(yè)面參數(shù),那我們就需要處理一下了。 小程序現(xiàn)在越來(lái)越流行,但是公司的很多項(xiàng)目都是用網(wǎng)頁(yè)寫(xiě)的,小程序語(yǔ)法不兼容原生網(wǎng)頁(yè),使得舊有項(xiàng)目遷移至小程序代價(jià)很高; 小程序之前開(kāi)放了webview功能,可以說(shuō)是網(wǎng)頁(yè)應(yīng)用的一大福音了,但...

    junbaor 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<