通过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 ...
随机推荐
- Java代码实现依赖注入
http://zhangjunhd.blog.51cto.com/113473/126545 这里将模仿Spring实现一种基于xml配置文件的依赖注入机制.文件中将实现3中注入,一是单值注入,包括i ...
- Devexpress VCL Build v2013 vol 14.1.3 发布
我修,我修,修修修. New Major Features in 14.1 What's New in VCL Products 14.1 Breaking Changes To learn abou ...
- 2018.10.18 bzoj4105: [Thu Summer Camp 2015]平方运算(线段树)
传送门 线段树妙题. 显然平方几次就会循环(打表证明不解释). 然后所有环长度的lcmlcmlcm不大于70. 因此维护一下当前区间中的节点是否全部在环上. 不是直接暴力到叶子节点修改. 否则整体打标 ...
- yii2 控制器的生命周期
控制器生命周期 http://www.yii-china.com/doc/guide/structure_controllers.html 处理一个请求时,应用主体 会根据请求路由创建一个控制器,控制 ...
- Linux IPC之共享内存
System V共享内存机制: shmget shmat shmdt shmctl 原理及实现: system V IPC机制下的共享内存本质是一段特殊的内存区域,进程间需要共享的数据被放在该共 ...
- 有趣的NaN类型
在学习Java集合的时候遇到了Float.isNaN(float)函数,点进去一看就不理解了,函数实现如下: public static boolean isNaN(float v) { return ...
- IntelliJ IDEA 2017版 spring-boot基础补充,原理详解
一.Spring发展史 1.Spring1.x 版本一时代主要是通过XML文件配置bean,在java和xml中不断切换,在学习java web 初期的时候经常使用 2.Spring2 ...
- 优秀前端工程师必备: 非常常用的checkbox的骚操作---全选和单选demo
提要: 前端开发的时候, 经常会遇到表格勾选, 单个勾选判断是否全选的事情.趁着有时间, 总结一下以备不时之需! 就像下面这个栗子: 1 源代码: h5 // 全选框 <input type=& ...
- 2015 - 4- 21 iOS开发越狱环境的搭建1
2015 - 4- 20 1. 越狱环境的搭建 http://www.iduuke.com/2030.html http://www.cnblogs.com/xiongwj0910/archi ...
- STL中list中push_back(对象)保存对象的内部实现
STL中list中push_back(对象)保存对象的内部实现 1. 在容器中,存放的是对象拷贝 #include<iostream> #include<list> using ...