扣丁学堂HTML5开发培训之APP页面中的返回实现的方法

2018-03-16 13:29:50 560浏览

看到这个题目你可能觉得这是什么鬼?其实我想说的是这种,看下面的录制:



这种交互在H5页面中比比皆是,点击城市->弹出城市选择浮层->按返回按钮关闭浮层。

这些操作都是不要点击左上角/右上角的关闭按钮就可以进行的,飞猪的H5是前进出现弹层,返回时弹层关闭,其他家都不行(去哪儿网H5飞机票,美团H5酒店)。

为什么要这么设计?

因为H5是在手机上操作的,手机上的手指可操作区域的覆盖范围很小,更别说左上角/右上角这些死角(取消/关闭)区域了。你肯定听过这个操作:轻触返回。这个在用户操作的时候非常方便友好,选择完城市后,不需要点击取消,直接在大拇指可以操作的地方点击返回就关闭了弹层。

如何实现

既然有这种非常好的需求,那作为开发肯定就会想法设法的实现这个功能了。你甚至都不用google,你就应该会想到类似的history.back(),history.go()这些方法了。然而想到这些依旧没用,理论上浏览器/webview的返回/前进的是要重新加载页面的,因为URL发生了变化。如果你真的知道单页面应用(SPA),或者使用React/Vue你就应该知道有个东西叫:路由。这些通过改变hash且无法刷新的url变化是HTML5时加入的history功能

the-history-interface

interfaceHistory{

readonlyattributeunsignedlonglength;

attributeScrollRestorationscrollRestoration;

readonlyattributeanystate;

voidgo(optionallongdelta=0);

voidback();

voidforward();

voidpushState(anydata,DOMStringtitle,optionalDOMString?url=null);

voidreplaceState(anydata,DOMStringtitle,optionalDOMString?url=null);

};

pushState

replaceState

还有一个事件

onpopstate

pushState,replaceState用来改变histroy堆栈顺序,onpopstate在返回,前进的时候触发

vue-router中的实现也是如此(第1694行)

具体实现

既然说了这么多,那我们来看下怎么实现这种功能。

来看下pushState和replaceState的兼容性

全绿,用起来放心多了。

思路:

点击弹层时pushState添加hash

"轻触返回"的时候触发onpopstate事件时候隐藏弹层并修改hash

<buttononclick="city()">

城市

</button><br>

<buttononclick="calendar()">

日历

</button><br>

<buttononclick="description()">

说明

</button>

<divid="city"class="com"style="display:none;">

模拟城市弹框层

</div>

<divid="calendar"class="com"style="display:none;">

模拟日历弹框层

</div>

<divid="description"class="com"style="display:none;">

模拟说明弹框层

</div>

button{

border:#0000;

background-color:#f90;

}

.com{

position:absolute;

top:0;

bottom:0;

left:0;

right:0;

background-color:#888589;

}

varcityNode=document.getElementById('city');

varcalendarNode=document.getElementById('calendar');

vardescriptionNode=document.getElementById('description');

functioncity(){

cityNode.style.display='block';

window.history.pushState({'id':'city'},'','#city')

}

functioncalendar(){

calendarNode.style.display='block';

window.history.pushState({'id':'calendar'},'','#calendar')

}

functiondescription(){

descriptionNode.style.display='block';

window.history.pushState({'id':'description'},'','#description')

}

window.addEventListener('popstate',function(e){

//alert('state:'+e.state+',historyLength:'+history.length);

if(e.state&&e.state.id==='city'){

history.replaceState('','','#');

cityNode.style.display='block';

}elseif(e.state&&e.state.id==='calendar'){

history.replaceState('','','#');

calendarNode.style.display='block';

}elseif(e.state&&e.state.id==='description'){

history.replaceState('','','#');

descriptionNode.style.display='block';

}else{

cityNode.style.display='none';

calendarNode.style.display='none';

descriptionNode.style.display='none';

}

})

主要看JS代码,监听页面的前进和后退事件来控制history。以上就是关于扣丁学堂HTML5培训之APP页面中的返回实现的方法详细介绍,最后想要工作不累就要不断的提升自己的技能,请关注扣丁学堂HTML5培训官网、微信等平台,扣丁学堂IT职业在线学习教育平台为您提供权威的HTML5视频教程系统,通过千锋扣丁学堂金牌讲师在线录制的第一套自适应HTML5在线视频课程系统,让你快速掌握HTML5从入门到精通开发实战技能。扣丁学堂H5技术交流群:559883758


关注微信公众号获取更多学习资料



【关注微信公众号获取更多学习资料】



查看更多关于“HTML5开发技术资讯的相关文章>>

标签: HTML5视频教程 HTML5全栈开发 HTML5培训 HTML5在线视频 前端开发

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号