博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记微信网页开发单页面返回不刷新的实现
阅读量:5986 次
发布时间:2019-06-20

本文共 3870 字,大约阅读时间需要 12 分钟。

需求

在微信网页开发中,点击返回按钮不刷新页面,进行页面切换,且实现'传值'功能.

问题由来

在做微信网页开发时,由于微信的左上角返回按钮会返回上一个页面并且刷新,无法做成打开页面选择内容后关闭当前页面,并且给前一个页面传值的功能.

实现方法

想实现此功能一开始想到的是不进行页面跳转了,把选择内容的页面也做在当前页面里,然后使用js来控制显隐.

登记页面

// 点击修改学校按钮document.querySelector('.em-school-right').addEventListener('tap', function() {    document.querySelector('.em-sign').classList.add('mui-hidden');    document.querySelector('.em-address').classList.remove('mui-hidden');})

选择页面

在微信实际页面中,由于整页显示,用户会点击到左上角返回按钮,会造成关闭页面.

需要对返回按钮进行一些操作来修改返回后的效果.

pushState

history提供了一个方法pushState,可以手动的添加页面进栈。

使用语法:

history.pushState(state, title, url);state:Object,与要跳转到的URL对应的状态信息。title:页面名字,方便调试。url:要跳转到的URL地址,不能跨域,对于单页应用来说没用,传空即可。

修改点击事件

// 点击修改学校按钮document.querySelector('.em-school-right').addEventListener('tap', function() {    document.querySelector('.em-sign').classList.add('mui-hidden');    document.querySelector('.em-address').classList.remove('mui-hidden');    // 历史记录中插入一条记录,防止微信返回按钮会关闭页面    var state = {        title: "选择学校",        url: "#school" // 这个url可以随便填,只是为了不让浏览器显示的url地址发生变化,对页面其实无影响    };    window.history.pushState(state, state.title, state.url);})

onpopstate

history.go和history.back(包括用户按浏览器历史前进后退按钮)触发,并且页面无刷的时候(由于使用pushState修改了history)会触发popstate事件,事件发生时浏览器会从history中取出URL和对应的state对象替换当前的URL和history.state

对返回按钮添加监听

// 添加微信返回\前进事件监听window.addEventListener("popstate", function(e) {    // 选择地址页面隐藏    document.querySelector('.em-address').classList.add('mui-hidden');    // 签到页面显示    document.querySelector('.em-sign').classList.remove('mui-hidden');}, false);

此时进入选择地址页面后,点击返回按钮,能实现页面切换

页面切换

选择学校后也要实现该操作,用 history.go(-1);实现手动去除历史记录中添加的记录

// 选择学校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;    // 手动去除历史记录中插入的记录    history.go(-1);    // 选择地址页面隐藏    document.querySelector('.em-address').classList.add('mui-hidden');    // 签到页面显示    document.querySelector('.em-sign').classList.remove('mui-hidden');})

选择学校

修改完善代码,实现后退,前进功能

/** * @description 初始化监听 */initListeners: function() {    var self = this;    // 添加微信返回\前进事件监听    window.addEventListener("popstate", function(e) {    //处于选择学校页面    if(self.chooseSchool) {        // 选择地址页面隐藏        document.querySelector('.em-address').classList.add('mui-hidden');        // 签到页面显示        document.querySelector('.em-sign').classList.remove('mui-hidden');    }        // 页面前进后如果为选择学校页面    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);// 点击修改学校按钮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');    // 历史记录中插入一条记录,防止微信返回按钮会关闭页面    var state = {        title: "选择学校",        url: "#school" // 这个url可以随便填,只是为了不让浏览器显示的url地址发生变化,对页面其实无影响    };    window.history.pushState(state, state.title, state.url);})// 选择学校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;    // 手动去除历史记录中插入的记录    history.go(-1);    // 选择地址页面隐藏    document.querySelector('.em-address').classList.add('mui-hidden');    // 签到页面显示    document.querySelector('.em-sign').classList.remove('mui-hidden');})}

实现效果

e5dcca61d7_clip.gif

感觉通过这些操作实现了简单的页面路由的功能,适用于不是特别复杂的页面切换选择

转载地址:http://ixylx.baihongyu.com/

你可能感兴趣的文章
button按钮
查看>>
如何使属性值为“只读”(readonly)的EDIT控件在获取焦点后不显示光标?
查看>>
Excel 教程二 单元格范围的使用
查看>>
kafka存活监控脚本
查看>>
CRM 理念
查看>>
paper 99:CV界的明星人物经典介绍
查看>>
大话数据结构-线性表
查看>>
常用正则验证
查看>>
Cookie登录实例
查看>>
php 验证码
查看>>
存量数据库管理和更新
查看>>
Oracle 检查数据库有哪些表频繁进行全表扫描
查看>>
python hmac 加密
查看>>
poj1042 Gone Fishing
查看>>
编写求任意二叉树中一条最长的路径的算法,要求输出此路径上各结点的值及路径的长度。...
查看>>
软件工程小组简介
查看>>
本人对于经理对于员工的不满
查看>>
共享程序集和强命名程序集(4):“运行时”如何解析类型引用
查看>>
前端 -- background
查看>>
CCF-NOIP-2018 提高组(复赛) 模拟试题(九)(2018 CSYZ长沙一中)
查看>>