解决jquery的fullPage插件后退按钮不能返回第一屏的问题

3 篇文章 0 订阅
2 篇文章 0 订阅

移动端全屏滑动需求

公司项目有一个需求,类似问卷形式的,当使用移动端登录时,问卷内容分成3屏,第一屏内都答完后,滑动到第二屏(只能第一屏题目都回答完毕才会滑动到下一屏,其他形式的滑动禁止),可以采用浏览器的后退按钮可以回到上一屏。
采用的jquery的一个fullPage插件来做的,发现插件有个bug,即在第二屏使用浏览器后退按钮不会回到第一屏。

找到问题所在

经过对js脚本一点点的寻找,发现问题是哈希值的问题,第三屏回第二屏正常,第二屏回第一屏没有效果,第二屏url+#two,第三屏url+#three,第一屏是url,当手动把url改为url+#one时可以正常使用后退按钮。

解决方案

1.换用其他插件如swiper插件
2.在此插件的基础上修改

进行解决

我想尽可能在此插件基础上进行修改,因为已经到了后期,重新换插件的话东西太多。
首先考虑的是在在页面加载时利用js跳转到url+#one页面实现能够正常跳转的功能,但是会面对一个新的问题,当用户用后退按钮回到第一屏时(url+#one页面),再点击后退会回到url页面,看起来完全没有任何变化。
经过对window.history等方面问题的查找,发现不能直接控制后退按钮做改写。利用多个hitory.back()或者go来做的话不太合理。
最后直接在页面的历史纪录方面考虑问题,如何直接省略url这个界面的跳转而直接到url+#one呢。
终于在网上找到了window.location.replace这个属性。
利用window.location.replace(’’)进行了跳转避免了后退两次的问题。
有3个页面 a,b,c
如果当前页面是c页面,并且c页面是这样跳转过来的:a->b->c
1:b->c 是通过window.location.replace("…xx/c") 此时b页面的url会被c页面代替,并且点击后退按钮时会回退到a页面(最开始的页面)
2:b->c是通过window.location.href("…xx/c") 此时b页面的路径会被c页面代替,但是点击回按钮后页面回退的是b页面
两者的区别: 两者后退时所回退的页面不一样

参照:window.location.replace和window.location.href区别

当然最优的解决方案还是用swiper插件来做,算是踩坑了,以后再也不用没有文档的插件了,还是花费了不少时间来读插件。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值