通过sessionStorage来根据屏幕宽度变化来加载不同的html页面
因为项目需要,分别写了移动端和PC端的两个html页面,现在需要根据不同的屏幕宽度来加载对应的页面。
先说一下本人的思路--
刚开始我直接在加载页面的时候判断屏幕宽度,然后加载相应的页面,大家是不是也想到会出现什么效果了?
没错,这个时候就出现了浏览器一直在加载切换页面的死循环!因为每次刷新页面都执行同一段js代码。。。
所以就要想办法存储刷新前的屏幕大小状态,在刷新页面的时候拿刷新前状态与刷新后状态对比,然后再决定加载哪个页面。
那么问题就来了,我们通过什么来存储这个状态呢?
这个时候就想起了h5的新特性(本地存储):
1. localStorage 长期存储数据,浏览器关闭后数据不丢失;
2. sessionStorage 的数据在浏览器关闭后自动删除。
而这次主要是通过临时存储(sessionStorage)来判断根据屏幕宽度变化来加载对应的页面的,直接看js代码:
// 通过临时存储(sessionStorage)来判断根据屏幕宽度变化来加载 移动端页面 / PC端页面 var indexUrl = "http://192.168.10.173:8020/art-preSale/index.html?__hbt=1515730525577"; //PC端
var indexMobileUrl = "http://192.168.10.173:8020/art-preSale/index-m.html?__hbt=1516171504432"; //移动端 var newState = 0; //记录当前是大屏幕(1)还是小屏幕 (0)
resizeUnit(); //初始化加载页面 //浏览器窗口变化时也要初始化加载页面
window.onresize = function(){
resizeUnit();
} /**
* 刷新页面时加载对应的页面
* @param {Object} width 加载不同页面的分界点(屏幕宽度),默认不传参就是768
*/
function resizeUnit(width){
var width = width || 768;
var windowWidth = window.innerWidth; //获取可视窗口大小
//var windowWidth = window.screen.width;
// 判断窗口大小 以传入的宽度为分界点
if(windowWidth<width){
newState = 0;
}else {
newState = 1;
}
//判断sessionStorage是否存在 "oldState"
if(sessionStorage.getItem('oldState')){
//刷新后sessionStorage已保存有刷新前的状态,则获取该值,与当前状态值进行对比
var oldState = sessionStorage.getItem('oldState');
if(newState!=oldState){
sessionStorage.setItem('oldState', newState); // 重置为当前状态值
getHtml(newState); // 跳转到相应的html页面
}
}else{
//保存刷新前的状态数据到sessionStorage
sessionStorage.setItem('oldState', newState); //初始化的时候设置
getHtml(newState);
}
} /**
* 根据状态跳转相应的html页面
* @param {Object} state 当前屏幕宽度的状态 (1为大屏幕,0为小屏幕)
*/
function getHtml(state) {
if(state==1){
window.location.replace(indexUrl);
}else if(state==0){
window.location.replace(indexMobileUrl);
}
};
以上代码经测试是可行的,有问题欢迎提出哦!
有人跟我推荐使用浏览器本身的cookie来实现加载不同页面的功能, 因为cookie是所有浏览器都支持的,有时间可以尝试一下 :)
通过sessionStorage来根据屏幕宽度变化来加载不同的html页面的更多相关文章
- android 屏幕旋转 不重新加载oncreate
当手机设定了使用横屏或者竖屏的时候,还想要使用重力感应,可以设置activity属性 android:screenOrientation="sensor" 但是每次翻转屏幕,都会重 ...
- Jqeury Mobile实战之切屏效果以及屏幕滚动到底端加载更多和点击切换更多
http://blog.csdn.net/q718330882/article/details/46120691 //页面滚动到底部加载更多事件 $( window ).scroll(function ...
- 【浅谈html5 响应式布局之自动适应屏幕宽度】
允许网页宽度自动调整 “自适应网页设计”到底是怎么做到的?其实并不难. 首先,在网页代码的头部,加入一行viewport元标签. <meta name=”viewport” content=”w ...
- HTML5+CSS3的响应式网页设计:自动适应屏幕宽度
这几天都在修改博客上面的样式.本来用的是d83.0的模板.自己又修改了许多地方,其中自己修改的一些地方在手机里面显示的效果不是很理想,于是想改成自适应的效果.对CSS3不是特别的熟练,只能去网上找找案 ...
- 移动端 css实现自适应正圆 ( 宽高随着手机屏幕宽度自适应 )
序言:应朋友要求随手写了一下移动端 css实现自适应正圆 ( 宽高随着手机屏幕宽度自适应 ) ,以备后用 LESS代码: .adaptive-circle { margin: 50px auto 0; ...
- 移动页面HTML5自适应手机屏幕宽度
标签: 网上关于这方面的文章有很多,重复的东西本文不再赘述,仅提供思路,并解释一些其他文章讲述模糊的地方. 1.使用meta标签,这也是普遍使用的方法,理论上讲使用这个标签是可以适应所有尺寸的屏幕的, ...
- JS 获取和监听屏幕方向变化(portrait / landscape)
移动设备的屏幕有两个方向: landscape(横屏)和portrait(竖屏),在某些情况下需要获取设备的屏幕方向和监听屏幕方向的变化,因此可以使用Javascript提供的 MediaQueryL ...
- 获取Android 手机屏幕宽度和高度以及获取Android手机序列号
1.获取Android 手机屏幕宽度 1 DisplayMetrics dm = new DisplayMetrics(); 2 this.getWindowManager().getDefaultD ...
- 转载:iPhone 6 Plus 屏幕宽度问题 375 vs 414
首先看一张比较简单明了的 iPhone 6 与 iPhone 6 Plus 对比图,来自 PaintCode 的<The Ultimate Guide To iPhone Resolutions ...
随机推荐
- Android 在一个程序中启动另一个程序(包名,或者类名)
http://hi.baidu.com/xiaofanqing/item/6fd724f7c5bb6dce531c26b7 Android 开发有时需要在一个应用中启动另一个应用,比如Launcher ...
- 【转】Paxos算法3-实现探讨
——转自:{老码农的专栏} 前两篇Paxos算法的讨论,让我们对paxos算法的理论形成过程有了大概的了解,但距离其成为一个可执行的算法程序还有很长的路要走,原因是很多的细节和错误未被考虑.Googl ...
- UVa 12545 Bits Equalizer (贪心)
题意:给出两个等长的字符串,0可以变成1,?可以变成0和1,可以任意交换s中任意两个字符的位置,问从s变成t至少需要多少次操作. 析:先说我的思路,我看到这应该是贪心,首先,如果先判断s能不能变成t, ...
- 201709018工作日记--RecyclerView的使用(点击,瀑布流的实现)
参考相关博客: http://www.jianshu.com/p/55e3f1b6701f 刘望舒 http://www.jianshu.com/p/4fc6164e4709 王三的猫阿德 http ...
- DOM数据解析
//DOM : Document Object Model ,一种XML解析的方式,先读取整篇的内容,然后再进行解析,解析速度比较快,如果内出现错误,解析就会失败,iOS不支持DOM解析,goole提 ...
- 《Forward团队-爬虫豆瓣top250项目-设计文档》
成员:马壮,李志宇,刘子轩,年光宇,邢云淇,张良 设计方案: 1.能分析HTML语言: 2.提取重要数据,并保存为文本文档: 3.用PY代码调取文本文档的数据: 4.编写提取部分数据的python代码 ...
- 18、docker的持久化存储和数据共享
18.1 Data Volume Docker持久化数据方案 基于本地文件系统的Volume 可以在执行docker create或者docker run的时候,通过-v参数将主机的目录作为容器的 ...
- EBS获取附件URL
http://wenku.baidu.com/link?url=MnYX269RBqW9ZRh-4famwduhYq9As0-vsIyVPA7aqv64cdxxjZEOaEE1_KZ9SGjY9qCx ...
- Android 体系架构
什么是Android? 答:Android就是移动设备的软件栈,包括(一个完整的操作系统,中间件,关键应用程序), 底层是Linux内核,包括(安全管理, 内存管理,进程管理 ,电源管理,硬件驱动-) ...
- Mac突然没有声音但是重启后可以恢复
命令行操作方式 今天又发现了Mac上的一个BUG,有时候在工作之余我们去吃饭的时候Mac经常会进入睡眠状态,但是有的时候从睡眠状态激活后,本来想听个音乐,但是突然发现音乐不可以用了,以前每次都是重 ...