首先说一下项目问题:当前是传统的MVC的java项目,异步上拉加载新闻,中途假如点进详情,再按手机的返回键,页面回到列表又是第一页了!
本想改造成VUE 但由于项目已经完成,只能硬着头皮去优化。下面直接说肮脏的解决方法:
在列表页添加如下内容:
1.样式(瞎写的,自己优化一下):
<style> .iframe { position: absolute; left: 0; right: 0; top: 0; bottom: 0; width: 100%; height: 100%; background: #fff; /*overflow-y: hidden;*/ z-index: 999; } .ifrom_hide{ display: none; } .mengbu{ position: absolute; left: 0; right: 0; top: 0; bottom: 0; width: 100%; height: 100%; color: white; background: rgba(0,0,0,0.4); z-index: 1999; } .mengbu img{ width:30px; height: 30px; display: block; margin: 0 auto; position: absolute; top:47%; left:0; right: 0; } </style>
2. DOM
<!--这是蒙布-->
<div class="mengbu ifrom_hide"> <img src="{{asset('static_wechat/images/loading.gif')}}"> </div> <!--这是用于加载详情页的,把详情页在本页面打开--> <div id="iframeId" frameborder="0" class="iframe ifrom_hide"> </div>
3. JS (用于:a.设置缓存页为当前页 b.监听返回键并进行操作)
/* 用于列表页中点击详情,为了回退之后不至于重新加载列表而使用, 不改变原结构,但新页面的样式可能会对当前页有影响 */ //压入当前页面的空URL*** state = { title: "", url: "#" }; //将当前历史设为空 function do_url(){ if($('.iframe').hasClass('ifrom_hide')){ window.history.pushState(state, "title", "#"); } } //监听列表页的倒退按键 window.onpopstate = function(event) { if(!$('.iframe').hasClass('ifrom_hide')){ $('.iframe,.mengbu').addClass('ifrom_hide') $('.iframe').html('') }else{ window.history.go(-1) } };
4. 在你的列表页面,当点击了那一条新闻后,不要让他进行页面跳转,而是在本界面用局部加载的方式来引入
do_url();//第一次清空-设置空的URL#(必须) // 传入新闻ID function open_detail(ID) { do_url();//第二次清空-设置空的URL#(必须) var url = '/public/XXXXXX?messageid='+ID; $('.iframe').load(url) $('.mengbu').removeClass('ifrom_hide') setTimeout(function(){ $('.mengbu').addClass('ifrom_hide') $('.iframe').removeClass('ifrom_hide') },800) }
5. 局部加载的页面可能会有样式影响列表样式的CSS存在,这个需要根据情况去调整