第134天:移动web开发的一些总结(二)

简介: 1、响应式布局开发一个页面,在所有的设备上都能够完美展示。媒体查询:@media screen and (max-width:100px) { }媒体类型:screen(屏幕)print(打印机)handheld(手持设备)all(通用)常用媒体查询参数:width —— 视口宽高he...

1、响应式布局

开发一个页面,在所有的设备上都能够完美展示。

媒体查询:@media screen and (max-width:100px) { }

媒体类型:screen(屏幕)

print(打印机)
handheld(手持设备)
all(通用)

常用媒体查询参数:

width —— 视口宽高
height —— 视口宽高
device-width —— 设备的宽高
device- height —— 设备的宽高
orientation:检查设备处于横向(landscape)还是竖屏(portrait)

2、响应式设计设计点

设计点一:百分比布局

仅仅使用媒体查询来适应不同固定宽度设计,只会从一组css到另一组css的切换。两种设计之间没有任何平滑渐变。只使用媒体查询,布局有时会变得不可控制。
当然,这只是建议,也有一些页面采用固定布局的情况下能够很好的在一些没有考虑过媒体查询情况下的设备上很好的展示。

设计点二:弹性图片

思路:无论何时,全都包在图片的元素宽度范围内,以最大的宽度同比完整的显示图片。

img{ max-height: 100% }

设计点三:重新布局,显示与隐藏

当页面达到手机屏幕宽度的时候,很多时候就要放弃一些传统的页面设计思想。力求页面简单,做如下处理:
① 同比例缩减元素尺寸
② 调整页面结构布局
③ 隐藏冗余的元素
经常需要切换位置元素使用【绝对定位】,减少重绘提高渲染性能。

关于响应式设计的思考:

根据响应式设计的理念,一个页面包含所有设备不同屏幕的样式和图片,当一个移动设备访问一个响应式的页面,就会下载pc,笔记本,ipad等不同设备对应的样式。而这些样式却是冗余的,完全没有用。
权衡利弊:性能不是最优,但是能减少重复开发。

3、 特殊样式处理

(1) 高清图片

在移动web页面上渲染图片,为了避免图片产生模糊,图片的宽度应该用物理像素单位渲染,即是100 * 100的图片,应该使用100dp * 10dp。
width:(w_value/dpr)px;
height:(w_height/dpr)px;

(2) 一像素边框

同样是retina屏幕下的问题,根本原因:1px使用2dp渲染。
border:0.5px;(错误),仅仅ios8可以使用
通用方案:scaleY(0.5)

(3) 相对单位rem

为了适应各大屏幕的手机,px略显固定,不能根据尺寸的大小而改变,使用相对单位更能体验页面兼容性。
em:是根据父节点的font-size为相对单位
rem:是根据html的font-size为相对单位
em在多层嵌套下,变得非常难以维护,rem更加能作为全局统一设置的度量
那么,rem的基值设置为多少比较好?
回归目的:为了适应各大手机屏幕
rem = screen.width / 20

不使用rem的情况:font-size

一般来讲font-size是不应该使用rem的相对单位的。因为字体的大小是趋向于阅读的实用性,并不适合于排版布局。
同理,趋向于一些固定的元素的特性。我们不使用rem而改为使用px去确保在不同屏幕上表现一致(跟rem的目的相反)。

(4) 多行文本溢出•••

单行文本溢出,对title类的使用非常多,而多行文本类,在详情介绍则用的比较多。

 1 //单行文本溢出…
 2 .inaline {
 3     overflow: hidden;
 4     white-space: nowrap;
 5     text-overflow: ellipsis;
 6 }
 7 //多行文本溢出…
 8 .intwoline {
 9     display: -webkit-box: !important;
10     overflow: hidden;
11 
12     text-overflow: ellipsis;
13     word-break: break-all;
14 
15     -webkit-box-orient: vertical;
16 -webkit-line-clamp: 4;
17 }

4、 终端交互优化

对click事件say no
弹性滚动
上拉刷新
tap事件基础
touch触摸事件
下拉加载
300ms:

移动web页面上的click事件响应都要慢上300ms
用300ms判断是单击还是双击

(1) tap基础事件

300ms延迟怎么破?tap事件代替click事件。自定义tao事件原理:
在touchstart、touchend的记录时间、手指位置,在touchend时进行比较,如果手指位置为同一位置(或允许移动一个非常小的位移值)且时间间隔较短(一般认为是200ms),且过程中未曾触发过touchmove,即可认为触发了手持设备上的“click”,一般称它为“tap”。

tap“点透”的bug: 有两层,点击第一层的时候,如果点击的区域在第二层的范围内,那么第二层也会被触发。(原因与300ms有关)

tap透传的解决方案:
①使用缓存动画,过渡300ms的延迟
②中间层dom元素的加入,让中间层接收这个“穿透”事件,稍后隐藏
③“上下”都使用tap事件,原理上解决tap穿透事件,(但是不可避免原生标签的click事件,如a,input)。
③ 改用Fastclick的库(听过最新的zepto已经fixed掉这个bug)

(2) Touch基础事件

触摸才是移动设备的交互的核心事件,支持多点触摸。
touchstart:手指触摸屏幕触发(已经有手指放屏幕上不会出发)
touchmove:手指在屏幕上滑动,连续触发
touchend:手指离开屏幕时触发
touchcancel:系统取消touch时候触发(不常用)eg:滑动页面时来了一个电话或者其他系统事件

除常见的事件属性外,触摸事件包含专有的触摸属性:
touches:跟踪触摸操作的touch对象数组
targetTouches:特定事件目标的touch对象数组
changeTouches:上次触摸改变的touch对象数组

一个小BUG: android只会触发一次touchstart,一次touchmove,touchend不触发。(4.0,4.1有,4.2修复没有了,4.4开始又出现了)

解决方案: 在touchmove中加入:event.preventDefault(),可fixedBug。

但注意:event.preventDefault()会导致默认行为不发生,如scroll,导致页面不滚动!如果页面带有滚动条,就需要考虑更换解决方案。

(3) 弹性滚动,下拉刷新

①弹性滚动:当客户端的页面滚动到顶部或底部的时候,滚动条会收缩并让我们多滑动一定距离。通过缓冲反弹的效果,带给用户良好的体验。
移动web页面也是拥有这样的能力的,但滚动有几种情况需要考虑:
body层滚动:(系统特殊化处理)
自带弹性滚动,overflow:hidden失效,GIF和定时器暂停。
局部滚动:没有弹性滚动,没有滚动惯性,不流畅。
局部滚动开启弹性滚动:

body {
    overflow:scroll;
    -webkit-overflow-scrolling:touch;
}
但注意:android不支持原生的弹性滚动!但可以借助三方库iScroll来实现

②下拉刷新:顶端下拉一小点距离,页面弹性滚动向下。
④ 上拉加载:使用scroll事件,而不是touch事件(android有bug)

(4) Canvas & GPU render【GPU 渲染】

优化技巧: canvas代替img标签
drawImage(image,x,y);canvas上绘制图片
drawImage(image,x,y,width,height);canvas上绘制缩放图片

原因: img使用浏览器渲染,当图片特别大且手机性能不是很好的情况下,会特别卡,通常表现在滑动图片。因为没有触发物理设备本身的GPU(图形处理器)渲染

image object:

① 预加载图片:当设置img.src=””的时候,就表示请求加载图片
② 图片的按比例缩放

(5) css3 animation

当一个css3动画结束时,我们可以监听相关事件AnimationEnd,比如对于webkit来说,是webkitAnimationEnd。

5、 跨终端web

① 单域 - Media Query
② 单域 – 多模板
③ 多域 – 跳转(很原始)
④ 多平台 App

(1) 移动优先:

① 移动端的用户和流量越来越多
② 各种屏幕让我们更聚焦业务的本领
③ 移动设备有更先进的人机交互体验

(2) 多终端检测
(3) 接口:结构:通用接口,

接口模型:前端消费者;后端生产者;测试监督者

6、零碎的细节

1)CSS3动画,代替DOM animation,效率更高,因为css3直接使用浏览器的GPU(图形处理器)渲染

2) 当你给一个元素设置它的百分比宽度的时候,他需要一个比照,也就是父元素,但是当它没有父的时候,需要给他一个绝对定位absolute值,但是在移动开发中,给整个整块的页面使用position: absolute;很占用内存,特别是当内容比较多的时候,会非常明显。会有几个后果:在ios下,会导致浏览器直接崩溃掉;在android下,会导致非常非常的卡。所以建议直接用js计算。

3)将图片显示到一排上,不使用浮动,使用-webkit-transform:translate3d(0,0,0); position: absolute;

4)new Date() * 1;// * 1 ,进行数值运算,转换为数字形式的时间戳

5)

self.startX = evt.touches[0].pageX; //记录开始的位移,touches包含着所有手指触摸在屏幕上的点的集合
-webkit-backface-visibility:hidden;/* 防止闪白 */

6)更多图片的优化,保留3个要使用的节点,当前的,上一个,下一个图片的节点,剩余的不需要的删除

7)jQuery Mobile(JQM jQMobile)
是jQuery在手机上和平板设备上的版本,是创建移动web app的框架。

8)2048制作过程中遇到的bug:(见9(2)touch基础事件BUG)

// 手机上手指识别无用,chrome19827号错误:touchevent不被触发。防止没有正确使用preventDefault()
document.addEventListener('touchmove', function(event) {
    event.preventDefault();
});

10)使用Dropbox发布自己的web app
免费
限制: ① 静态网站 ② 速度较慢(在国外) ③ 域名不宜记忆
11)web app、native app和hybrid app(混合模式)

相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
相关文章
|
20天前
|
监控 JavaScript 前端开发
《理解 WebSocket:Java Web 开发的实时通信技术》
【4月更文挑战第4天】WebSocket是Java Web实时通信的关键技术,提供双向持久连接,实现低延迟、高效率的实时交互。适用于聊天应用、在线游戏、数据监控和即时通知。开发涉及服务器端实现、客户端连接及数据协议定义,注意安全、错误处理、性能和兼容性。随着实时应用需求增加,WebSocket在Java Web开发中的地位将更加重要。
|
1月前
|
Web App开发 前端开发 开发工具
介绍Web开发的基础知识
介绍Web开发的基础知识
29 7
|
1月前
|
存储 资源调度 应用服务中间件
浅谈本地开发好的 Web 应用部署到 ABAP 应用服务器上的几种方式
浅谈本地开发好的 Web 应用部署到 ABAP 应用服务器上的几种方式
26 0
|
1月前
|
存储 前端开发 JavaScript
从前端到后端,探索现代Web开发技术
本文探索了现代Web开发技术的各个方面,包括前端和后端开发以及多种编程语言的应用。通过对JavaScript、Java、Python、C、PHP和Go等语言的介绍,深入探讨了前端和后端开发的基本原理和常用工具。同时,还涵盖了数据库技术在Web开发中的重要性和应用场景。无论你是初学者还是有经验的开发者,本文都能为你提供全面的视角和实用的知识,帮助你在Web开发领域取得更好的成果。
|
1月前
|
缓存 关系型数据库 API
后端开发:构建高效、可扩展的Web应用程序的关键
后端开发:构建高效、可扩展的Web应用程序的关键
21 0
|
6天前
|
JSON Java fastjson
Spring Boot 底层级探索系列 04 - Web 开发(2)
Spring Boot 底层级探索系列 04 - Web 开发(2)
15 0
|
6天前
|
安全 编译器 PHP
PHP 8.1版本发布:引领Web开发新潮流
PHP编程语言一直是Web开发的主力军,而最新发布的PHP 8.1版本则为开发者们带来了更多创新和便利。本文将介绍PHP 8.1版本的主要特性,包括更快的性能、新的语言功能和增强的安全性,以及如何利用这些功能来提升Web应用程序的质量和效率。
|
9天前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
|
9天前
|
前端开发 数据挖掘 API
使用Python中的Flask框架进行Web应用开发
【4月更文挑战第15天】在Python的Web开发领域,Flask是一个备受欢迎的轻量级Web框架。它简洁、灵活且易于扩展,使得开发者能够快速地构建出高质量的Web应用。本文将深入探讨Flask框架的核心特性、使用方法以及在实际开发中的应用。
|
18天前
|
安全 前端开发 Java
Java Web开发知识点学习总结
Java Web开发涉及Java基础、Servlet、JSP、数据库操作(SQL+JDBC)、MVC设计模式、Spring框架、Hibernate ORM、Web服务(SOAP&RESTful)、安全认证(HTTP Basic/Digest/OAuth)及性能优化(缓存、异步、负载均衡)。
17 3