因为项目需要,分别写了移动端和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页面的更多相关文章

  1. android 屏幕旋转 不重新加载oncreate

    当手机设定了使用横屏或者竖屏的时候,还想要使用重力感应,可以设置activity属性 android:screenOrientation="sensor" 但是每次翻转屏幕,都会重 ...

  2. Jqeury Mobile实战之切屏效果以及屏幕滚动到底端加载更多和点击切换更多

    http://blog.csdn.net/q718330882/article/details/46120691 //页面滚动到底部加载更多事件 $( window ).scroll(function ...

  3. 【浅谈html5 响应式布局之自动适应屏幕宽度】

    允许网页宽度自动调整 “自适应网页设计”到底是怎么做到的?其实并不难. 首先,在网页代码的头部,加入一行viewport元标签. <meta name=”viewport” content=”w ...

  4. HTML5+CSS3的响应式网页设计:自动适应屏幕宽度

    这几天都在修改博客上面的样式.本来用的是d83.0的模板.自己又修改了许多地方,其中自己修改的一些地方在手机里面显示的效果不是很理想,于是想改成自适应的效果.对CSS3不是特别的熟练,只能去网上找找案 ...

  5. 移动端 css实现自适应正圆 ( 宽高随着手机屏幕宽度自适应 )

    序言:应朋友要求随手写了一下移动端 css实现自适应正圆 ( 宽高随着手机屏幕宽度自适应 ) ,以备后用 LESS代码: .adaptive-circle { margin: 50px auto 0; ...

  6. 移动页面HTML5自适应手机屏幕宽度

    标签: 网上关于这方面的文章有很多,重复的东西本文不再赘述,仅提供思路,并解释一些其他文章讲述模糊的地方. 1.使用meta标签,这也是普遍使用的方法,理论上讲使用这个标签是可以适应所有尺寸的屏幕的, ...

  7. JS 获取和监听屏幕方向变化(portrait / landscape)

    移动设备的屏幕有两个方向: landscape(横屏)和portrait(竖屏),在某些情况下需要获取设备的屏幕方向和监听屏幕方向的变化,因此可以使用Javascript提供的 MediaQueryL ...

  8. 获取Android 手机屏幕宽度和高度以及获取Android手机序列号

    1.获取Android 手机屏幕宽度 1 DisplayMetrics dm = new DisplayMetrics(); 2 this.getWindowManager().getDefaultD ...

  9. 转载:iPhone 6 Plus 屏幕宽度问题 375 vs 414

    首先看一张比较简单明了的 iPhone 6 与 iPhone 6 Plus 对比图,来自 PaintCode 的<The Ultimate Guide To iPhone Resolutions ...

随机推荐

  1. java利用递归实现汉诺塔算法

    package 汉诺塔; //引入Scanner包,用于用户输入 import java.util.Scanner; public class 汉诺塔算法 { public static void m ...

  2. Django介绍(1)

    https://www.cnblogs.com/yuanchenqi/articles/6083427.html 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构, ...

  3. [转]一个CMake编译问题的解决过程

    问题的提出 公司的一个power-pc平台的产品,有个协议进行了修改,过程中出现了比较奇怪的情况.直接将修改后的动态库下载到设备上(原始设备是有文件系统和其他的依赖文件的,相当于部分更新应用),设备和 ...

  4. Web Service测试工具小汇

    1..NET WebService Studio 这款工具出自微软内部,最大的优点是可视化很好,不用去看那些XML文件,WebService的基础内容就有XML,但是测试中Case过多,每次测试结果都 ...

  5. Unit Testing of Spring MVC

    试验1:做的条目不发现首先,我们必须确保我们的应用是工作性质所做条目不发现.我们可以写的测试以确保通过以下步骤: 1.配置的模拟对象时抛出一个todonotfoundexception findbyi ...

  6. RabbitMQ添加rabbitmqadmin和其使用方法(类似Redis的redis-cli)

    一:先进入rabbitmq的安装目录下的bin目录,执行wget -c http://localhost:15672/cli/rabbitmqadmin:(前提是plugin management已经 ...

  7. java 路径、className.class.getResourceAsStream()、ClassLoader.getSystemResourceAsStream() 、FileInputStream

    className.class.getResourceAsStream 用法: 第一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类Test.class ,同时有资源文件c ...

  8. struts2 的特征

    web.xml <filter> <filter-name>struts2</filter-name> <filter-class>org.apache ...

  9. (字典树模板)统计难题--hdu--1251

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1251 在自己敲了一遍后终于懂了,这不就用了链表的知识来建立了树,对!就是这样的,然后再查找 代码: #i ...

  10. android Qzone的App热补丁热修复技术

    转自:https://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=400118620&idx=1&sn=b4fdd5055731 ...