初识H5横向布局带来的缓存问题

最近有幸接到一个 H5 的活,周五谈好需求,说下周一就要效果出来,乍一看挺简单的,但是做起来就不是那么回事了。接下来说说我的踩坑之路。

一、页面里面要求有一条会自动延长的不规则曲线,就如这样。

运动的曲线.gif

开始我一听甲方说要这种效果,我是不敢接这个活的。大家肯定都知道,这条曲线如果用 canvas 或者 svg 画出来,不得一年也得半载,况且我也只是个初级选手而已,这是会出人命的!好在我问了下我们公司的 UI 大哥,他就回了我一句话: ease!画个 gif 图就好了!

于是乎以为这个最难的问题都解决了,剩下的都好说了。。。

二、甲方给出的UI图是横向的,没明确要求打开页面就是横屏播放

之前确实没有做过横屏的移动端网页,想当然的以为打开页面时,把手机横过来,页面也就自动横过来了。所以我就那么做了。结局是在交给甲方后,甲方明确要求打开页面就是横屏播放。那我能怎么样啊,钱在人家手里攥着,我只能改了!吃一堑长一智吧,谁让自己没经验呢。当时是晚上10点,我改到凌晨5点(前一天晚上加班到凌晨2点)。

  1. 竖屏页面改横屏页面的开始

    第一个念头就是 transform: rotate(90deg) ,嗯,页面是横过来了。当时用的 rem 布局,按理说横过来之后,应该是占满全屏的,可结果并不是这样,无论我把高调成100%,还是宽调成100%,都占不满全屏。只能去google了。发现 transform: rotate(90deg)不是这么直接写进去的。而是这样:

css文件:
//需要用到媒体查询
// screen 彩屏设备
// orientation:portrait 竖屏(竖屏设置上让其横屏播放)
@media screen and (orientation: portrait) {
    #box {
        -webkit-transform:rotate(90deg);
        -moz-transform: rotate(90deg);
        -ms-transform: rotate(90deg);
        transform: rotate(90deg);
    }
}

js文件:
<script>
    //获取屏幕可视区宽高
    var width = document.documentElement.clientWidth;
    var height =  document.documentElement.clientHeight;
    //对宽高进行判断
    if( width < height ){
        $box =  $(‘#box‘);
        //把设备可视区的宽和高赋值给 box 的高和宽。
        //这样就实现旋转过来的 box 的宽高跟屏幕的可视区大小一样了
        $box.width(height);
        $box.height(width);
        //执行到这一步时,页面旋转过来成横向的了,宽高也跟屏幕的可视区大小一样了
        //但是,发现页面并没有100%在可视区范围内,如下图
        //所以需要对 box 进行定位,然后就 ok 了
        $box.css(‘top‘,  (height-width)/2 );
        $box.css(‘left‘,  0-(height-width)/2 );
    }
</script>

出去一块的页面效果.jpg

  1. 页面是横过来了,意味着原来的 rem 布局就全乱了。当时情况紧急,一看 rem 用不上了,立马用 百分比布局 进行修改,当时的 css 中一堆乱码,放眼望去,rem 和 % 就那么混在其中。就这么整到了凌晨 5 点。我也想认真画页面啊,可是时间不等我,只能先这样了。

三、ios 端背景音乐不能自动播放加自动循环播放

iPhone自动播放音视频,可以通过以下代码解决,但必须在微信Weixin JSAPI的WeixinJSBridgeReady才能生效,可能是微信接口对此做了某些限制。

  • ios 端背景音乐不能自动播放
    var oA = document.getElementsByTagName(‘audio‘)[0];
    function audioAutoPlay(){
        oA.play();
        //必须加上微信Weixin JSAPI的WeixinJSBridgeReady才能生效
        document.addEventListener("WeixinJSBridgeReady",function(){
            oA.play();
        },false);
    }
    audioAutoPlay()
  • ios 端背景音乐不能自动循环播放
    //在标签中加入 `loop` 对 ios 无效,只能通过以下的事件监听进行弥补
    var oA = document.getElementsByTagName(‘audio‘)[0];
    function init(){
        oA.addEventListener(‘ended‘,loopAudio,false);
    }
    function loopAudio(){
        oA.play();
    }

四、清除移动端浏览页面后的缓存

最后这个问题,也算是个大问题了。前提:我并没有在 js 中写入任何的本地存储。

最后一次增加了一张图片,结果后台负责上传至服务器的同志把图片名字给写错一个字母,导致图片加载不出来。后来把路径更改之后,再次用之前打开过该页面的手机浏览时,发现图片依旧没有加载出来,然而电脑就可以。各种找原因啊,这是为啥呢?

当时我想可能是缓存的问题吧,就把手机重启了,结果还是加载不出来。后来换个手机,一切正常。然后我手动清理手机缓存之后,一切正常了。

后来在网上查阅大量资料,发现是微信搞的鬼。因为移动端从头到尾是用微信浏览的网站,找到以下解决办法。

  • 用户在用微信打开的网页中,点击右上角的三个点,然后点击里面的刷新就好了。这种方法显然是不可行的。
  • 在URL后面拼接随机字串或时间戳,但是有人说 url 后面加随机数 CDN 会失效,加版本号更合理。
  • 用PHP写HTML文本,用php以在js css 图片后面加个随机数来解决
1.jpg?rand=<?php echo rand(1000,50000); ?>
  • 浏览器貌似是从webview的上层做的缓存。就是如果请求过了这个地址。就会存在本地。之后不取线上了。试试写头信息
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

以上这些方法,我一个也没试过,因为这只是我接的一个外快而且工期特别紧,前后也就五天就上线了,不具备测试条件。如读者遇到这种问题,还请挨个试一下看看,总有一款适合你。

作者:刘飞_007
链接:https://www.jianshu.com/p/22d382667f9e
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文地址:https://www.cnblogs.com/changk/p/8525186.html

时间: 2024-08-10 02:14:52

初识H5横向布局带来的缓存问题的相关文章

H5横向三栏布局

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>H5横向三栏布局</title>    <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0"

移动h5自适应布局

问题一,分辨率Resolution适配:不同屏幕宽度,html元素宽高比和字体大小,元素之间的距离自适应,使用rem单位. 问题二,单位英寸像素数PPI适配:使用rem单位,文字会发虚.段落文字,使用px单位,用media query或js来适配.标题文字可以直接使用rem单位. 问题三,设备像素比例DPR适配:1物理像素在<meta name="viewport" content="initial-scale=1, maximum-scale=1, minimum-s

html横向布局

我们都知道html块级元素默认是垂直排列的,而行内元素时水平排列的,而在布局时基本上都是用块级元素,如div等常用块级标签,那么如何让块级元素也进行水平排列呢? 这里我总结了五种方式,并简单总结了这五种方式的具体实现以及可能存在的问题. 方法1:display:inline-block 首先得先了解块级元素(block elements)和行内元素(inline elements)以及行内块状元素(inline-block elements) 块级元素:块级元素包含width height,pa

win8效果的横向布局

有一个月没写过博客了,自己的博客也没有看过,前段时间一直在忙着写代码,公司有一个制漆的产品,与传统纵向布局不一样,要求页面横向布局,类似win8的那种布局效果,最开始,我也没有什么头绪,然后硬着头皮做了,后来,遇到了很多麻烦,我网上查了一些资料,但都不太好,只好自己做了,在做的过程中,突然想到,flex布局,我就试了一下,成功了 <!doctype html> <head> <style type="text/css"> .scroll{ displ

【Android】13.0 UI开发(四)——列表控件RecyclerView的横向布局排列实现

1.0 新建项目,由于ListView的局限性,RecyclerView是一种很好取代ListView的控件,可以灵活实现多种布局. 2.0 新建项目RecyclerviewTest,目录如下: 3.0 这里需要在app/build.gradle中配置,导入依赖包: dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompa

微信H5开发,页面被缓存,不更新

原文:https://blog.csdn.net/qq_27471405/article/details/79295348  这里只是备份 前言:每一次请求,我们都知道浏览器会做一定处理,其中就包括对数据的缓存处理,相同参数做查询的处理,就可以让数据保存在客户端,这样可以减少对服务器的请求,但是,有时候一些特殊情况查询,是需要时时刻刻保持最新的,就好像学过sql类似数据脏读.幻读之类的情况,我们不需要浏览器做缓存处理,这时候该怎么处理呢? 方法一:在<head>标签里增加如下meta标签. &

div (1)div横向布局(2)inline-block 存在间隙的解决方式

关于H5表格布局问题的探究

创建表格然后合并表格,在表格中加入图片和文字,这仅仅是往里面添加进一些简单的东西,不过还是有点效果的,很空洞啊 ,这里面啥都没有,我希望可以学到更深层次的 技术,我继续去看书. <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body style="align-content:

h5可伸缩布局方案

https://github.com/amfe/lib-flexible ib.flexible 移动端自适应方案,相关文章请参考此处 Update[2016年01月13日] 首先,由衷的感谢@完颜(@SMbey0nd) 帮忙踩了这个坑,回想起iOS从7~8,从8~9,都踩过只至少一个坑,真的也是醉了. 手淘这边的flexible方案临时升级如下: 针对OS 9_3的UA,做临时处理,强制dpr为1,即scale也为1,虽然牺牲了这些版本上的高清方案,但是也只能这么处理了 这个版本不打算发布到C