Taro 3.3 alpha 发布:用 ant-design 开发小程序

Taro 3.3 alpha 发布:用 ant-design 开发小程序,第1张

程序的设计并没有完全遵循 Web 规范,导致小程序生态和传统 Web 开发生态之间的割裂,海量优秀的 Web 物料并不能直接用于小程序开发。因而 Taro 在相当一段时间内生态都相对薄弱,UI 框架选择不多的问题更是深深困扰着开发者。

另一方面,业界有着存量的 H5 应用,中短期内 H5 应用适配到小程序端的需要还会存在。我们希望能减少 H5 应用迁移到小程序端的成本,甚至能够直接运行在小程序端。

Taro 团队一直在思考如何最大限度地在小程序环境中复用 Web 生态,直到 Taro 30 诞生后,这种想法有了落地的可能。下文将介绍基于 Taro 30 实现 H5 同构的思路与问题,以及我们尝试适配了三大移动端 UI 框架 WEUI Ant Design Mobile VantUI 的实验结果。

Taro 30 是一款重运行时的跨端框架,它通过模拟实现浏览器的 BOM 和 DOM API 实现了对 React、Vue 等 Web 开发框架的兼容。

既然已经有了浏览器环境的 BOM 和 DOM API,Taro 应用和 Web 应用之间的鸿沟在于小程序组件和 HTML 标签之间的差异。

Taro3 的渲染数据流如下:

前端框架 -> Taro DOM -> 小程序 data

HTML 标签和小程序组件的标签名、属性、事件是有差异的,而前端框架无需感知这些差异。

因此前端框架适配层、Taro DOM 层不需要改动,只要在 Taro DOM 序列化为小程序 data 这一步作映射即可。

HTML 标签相对小程序组件封装程度更低、功能更简单,可以看作是小程序组件的子集。因此可以按一定的规则,把 HTML 标签映射为小程序组件,如:

完整的标签名映射规则请看: RFC 附录一

如果 HTML 标签的属性能在对应小程序组件的属性上找到对应,则进行映射,如:

完整的属性名映射规则请看: RFC 附录二

把 HTML 特有的事件在小程序端找到相似的事件进行映射,如:

完整的事件映射规则请看: RFC 附录三

前文介绍了我们会把 HTML 标签映射为小程序组件,但是 H5 应用中使用到的 CSS 标签选择器就会失效。

因此 Taro 使用了类名去进行模拟:

Taro 提供两种内置的浏览器默认样式,可以直接引入生效:

理想很美好,但现实却略显骨感。即使 Taro 能实现 BOM、DOM API,支持使用 HTML 标签等,同构方案还是存在着一些框架层面抹平不了的差异。以下列举出若干主要限制:

在 H5 中我们可以调用 DOM API 同步获取元素的尺寸:

但是在小程序中,获取元素尺寸的 API 是异步的:

因此不能兼容那些使用了同步 DOM API 去获取元素尺寸的组件。

<canvas> 、 <video> 、 <audio> 等标签在 H5 端可以直接调用 HTMLElement 上的方法:

但是在 Taro 中,要调用组件上的原生方法,必须先创建对应的 Context :

部分样式或 CSS 选择器在小程序中不支持,如:

首先需要安装 v33 的 CLI 工具:

然后进入项目,把 packagejson 文件中 taro 相关依赖的版本修改为 ^330-alpha2 ,再重新安装依赖(建议先把 node_modules 文件夹删除)。

为了节省项目空间,同构功能是可选的,以 Taro 插件的形式提供。

首先开发者需要安装插件 @tarojs/plugin-html :

然后配置使用此插件:

为了验证同构功能的可用性和效果,我们对 CSS 样式库 WEUI 、React 组件库 Antd Design Mobile 、Vue2 组件库 VantUI 的所有组件进行了测试。

测试效果比较理想,甚至稍微超出我们的预期,配合各组件库自身的按需加载能力,能以小巧的体积使用丰富的组件,相信各位开发者会喜欢这个功能。

仓库地址: taro-weui

WEUI 是一个 CSS 的样式库,与框架无关,兼容性比较高,大部分组件能直接使用。

仓库地址: taro-antd-mobile

能直接兼容使用的组件大概为 80%,主要问题在于:

仓库地址: taro-vant

VantUI 的组件十分丰富,能直接兼容使用的组件大概为 70%。部分开发者会在 Taro 中配合使用 Vant Weapp,但 Vant Weapp 只能运行在微信小程序,因此对 VantUI 的直接适配是一个很好的补充。

适配过程主要遇到的问题有:

同构方案还在持续优化中,部分实现还没有最终定稿。欢迎各位开发者到我们的论坛下留言,提出您的宝贵意见~: 同构方案 RFC 。

欢迎关注凹凸实验室

对于一些初出校门或者是零基础转行人员来说,Web开发岗位在未来职位晋升、薪资待遇上都是前景可观的,想要成为一名合格的Web开发工程师就需要掌握岗位所需要的开发技能,下面和小编一起看一下都有哪些内容吧。

一、HTML5+CSS3

HTML5和CSS3是通往Web工程师路上必须学会的基本内容,主要包括了解常用浏览器和浏览器内核;了解语义化的概念;掌握HTML5语法及使用技巧;掌握HTML5常用标签。掌握CSS语法及使用技巧;掌握DIV+CSS布局方式;掌握常见网页布局模式。掌握HTML5新布局标签、多媒体标签;掌握CSS32D、3D变换、动画效果;能够使用CSS3新属性美化修饰网页;了解移动端屏幕、移动端浏览器、 *** 作系统的不同等内容。

二、JS交互设计

JS交互技术可以赋予页面一个动态的效果展示,提升用户的浏览体验,这部分主要是通过JS的学习掌握JavaScript基本语法;掌握常见JavaScript算法;掌握DOM的各种 *** 作;熟练使用面向对象思想进行DOM编程;掌握JavaScript的高级语法;掌握JavaScript常见兼容性方案。熟练使用jQuery *** 作DOM;熟练使用和编写jQuery案例。

三、Node开发

Nodejs不仅仅是一个框架,它是一个完整的JavaScript环境,配备了开发人员可能需要的开发工具。所以学好Node是在打通前后端开发中需要掌握的技术。这部分需要掌握ES6的基础用法和兼容性;掌握ES6的核心语法;使用ES6实现前端模块化开发。使用Webpack模块打包器;使用Nodejs进行Web服务端开发;掌握JavaScript异步编程模型;掌握JavaScript模块化编程方式;使用Nodejs *** 作MongoDB数据库;独立开发基于后台接口的动态网站、Ajax数据交互的项目;独立完成企业网站从前台到后台的基本开发工作。

四、前端框架

前端框架是Web开发人员需要熟练掌握的技能,并且在实际开发中是会被广泛应用的,那么对于前端框架方面需要掌握现在主流的Vue、React、Angular等,掌握D3js进行大数据可视化交互开发;掌握Vue技术栈进行项目开发;掌握React技术栈进行项目开发;掌握使用主流框架开发门户网站、管理系统、移动Web等客户端;掌握Webpack项目构建配置流程;掌握Web项目的部署与发布模式;掌握常见网站业务模块开发等。

五、小程序与APP开发

现在移动应用越来越受欢迎,掌握了小程序和APP开发技术可以增强自身竞争力,这就需要掌握小程序的开发基础;能够独立开发小程序项目;能够掌握Canvas的使用;能够掌握小程序的部署与发布;能够掌握小程序开发框架mpvue的使用;掌握第三方AI平台的使用。能够掌握小游戏开发基础;能够独立开发小游戏项目;能够掌握小游戏的部署与发布;能够独立使用ReactNative开发原生App。

这里整理了一份web前端学习路线的思维导图以及需要掌握和学习的内容:第一阶段:专业核心基础

阶段目标:

1 熟练掌握HTML5、CSS3、Less、Sass、响应书布局、移动端开发。

2 熟练运用HTML+CSS特性完成页面布局。

4 熟练应用CSS3技术,动画、d性盒模型设计。

5 熟练完成移动端页面的设计。

6 熟练运用所学知识仿制任意Web网站。

7 能综合运用所学知识完成网页设计实战。

知识点:

1、Web前端开发环境,HTML常用标签,表单元素,Table布局,CSS样式表,DIV+CSS布局。熟练运用HTML和CSS样式属性完成页面的布局和美化,能够仿制任意网站的前端页面实现。

2、CSS3选择器、伪类、过渡、变换、动画、字体图标、d性盒模型、响应式布局、移动端。熟练运用CSS3来开发网页、熟练开发移动端,整理网页开发技巧。

3、预编译css技术:less、sass基础知识、以及插件的运用、BootStrap源码分析。能够熟练使用 less、sass完成项目开发,深入了解BootStrap。

4、使用HTML、CSS、LESS、SASS等技术完成网页项目实战。通过项目掌握第一阶段html、css的内容、完成PC端页面设计和移动端页面设计。

第二阶段:Web后台技术

阶段目标:

1 了解JavaScript的发展历史、掌握Node环境搭建及npm使用。

2 熟练掌握JavaScript的基本数据类型和变量的概念。

3 熟练掌握JavaScript中的运算符使用。

4 深入理解分支结构语句和循环语句。

5 熟练使用数组来完成各种练习。

6熟悉es6的语法、熟练掌握JavaScript面向对象编程。

7DOM和BOM实战练习和H5新特性和协议的学习。

知识点:

1、软件开发流程、算法、变量、数据类型、分之语句、循环语句、数组和函数。熟练运用JavaScript的知识完成各种练习。

2、JavaScript面向对象基础、异常处理机制、常见对象api,js的兼容性、ES6新特性。熟练掌握JavaScript面向对象的开发以及掌握es6中的重要内容。

3、BOM *** 作和DOM *** 作。熟练使用BOM的各种对象、熟练 *** 作DOM的对象。

4、h5相关api、canvas、ajax、数据模拟、touch事件、mockjs。熟练使用所学知识来完成网站项目开发。

第三阶段:数据库和框架实战

阶段目标:

1 综合运用Web前端技术进行页面布局与美化。

2 综合运用Web前端开发框架进行Web系统开发。

3 熟练掌握Mysql、Mongodb数据库的发开。

4 熟练掌握vuejs、webpack、elementui等前端框技术。

5 熟练运用Nodejs开发后台应用程序。

6 对Restful,Ajax,JSON,开发过程有深入的理解,掌握git的基本技能。

知识点:

1、数据库知识,范式,MySQL配置,命令,建库建表,数据的增删改查,mongodb数据库。深入理解数据库管理系统通用知识及MySQL数据库的使用与管理,为Nodejs后台开发打下坚实基础。

2、模块系统,函数,路由,全局对象,文件系统,请求处理,Web模块,Express框架,MySQL数据库处理,RestfulAPI,文件上传等。熟练运用Nodejs运行环境和后台开发框架完成Web系统的后台开发。

3、vue的组件、生命周期、路由、组件、前端工程化、webpack、elementui框架。Vuejs框架的基本使用有清晰的理解,能够运用Vuejs完成基础前端开发、熟练运用Vuejs框架的高级功能完成Web前端开发和组件开发,对MVVM模式有深刻理解。

4、需求分析,数据库设计,后台开发,使用vue、node完成pc和移动端整站开发。于Nodejs+Vuejs+Webpack+Mysql+Mongodb+Git,实现整站项目完整功能并上线发布。

第四阶段:移动端和微信实战

阶段目标:

1熟练掌握Reactjs框架,熟练使用Reactjs完成开发。

2掌握移动端开发原理,理解原生开发和混合开发。

3熟练使用react-native和Flutter框架完成移动端开发。

4掌握微信小程序以及了解支付宝小程序的开发。

5完成大型电商项目开发。

知识点:

1、React面向组件编程、表单数据、组件通信、监听、生命周期、路由、Redux基本概念。练使用react完成项目开发、掌握Redux中的异步解决方案Saga。

2、react-native、开发工具、视图与渲染、api *** 作、Flutter环境搭建、路由、ListView组件、网络请求、打包。练掌握react-native和Flutter框架,并分别使用react-native和Flutter分别能开发移动端项目。

3、微信小程序基本介绍、开发工具、视图与渲染、api *** 作、支付宝小程序的入门和api学习。掌握微信小程序开发了解支付宝小程序。

4、大型购物网站实战,整个项目前后端分离开发;整个项目分为四部分:PC端网页、移动端APP、小程序、后台管理。团队协作开发,使用git进行版本控制。目期间可以扩展Threejs 、TypeScript。

相关配套视频教程邀您移至B站搜索尚学堂,免费教程随你挑!

Web前端技术主要包括HTML5、CSS3、Less、Sass、响应式布局、移动端开发、以及Ps设计等,更高级的前端开发人员还需要掌握JavaScript 语言、Mysql、Mongodb数据库开发、vuejs、webpack、elementui等前端框架技术。蜗牛学院这里也给大家整理了一份web前端学习路线,希望对想要学习web前端的小白有所帮助。

第一阶段:专业核心基础

阶段目标:

1 熟练掌握HTML5、CSS3、Less、Sass、响应书布局、移动端开发。

2 熟练运用HTML+CSS特性完成页面布局。

4 熟练应用CSS3技术,动画、d性盒模型设计。

5 熟练完成移动端页面的设计。

6 熟练运用所学知识仿制任意Web网站。

7 能综合运用所学知识完成网页设计实战。

知识点:

1、Web前端开发环境,HTML常用标签,表单元素,Table布局,CSS样式表,DIV+CSS布局。熟练运用HTML和CSS样式属性完成页面的布局和美化,能够仿制任意网站的前端页面实现。

2、CSS3选择器、伪类、过渡、变换、动画、字体图标、d性盒模型、响应式布局、移动端。熟练运用CSS3来开发网页、熟练开发移动端,整理网页开发技巧。

3、预编译css技术:less、sass基础知识、以及插件的运用、BootStrap源码分析。能够熟练使用 less、sass完成项目开发,深入了解BootStrap。

4、使用HTML、CSS、LESS、SASS等技术完成网页项目实战。通过项目掌握第一阶段html、css的内容、完成PC端页面设计和移动端页面设计。

第二阶段:Web后台技术

阶段目标:

1 了解JavaScript的发展历史、掌握Node环境搭建及npm使用。

2 熟练掌握JavaScript的基本数据类型和变量的概念。

3 熟练掌握JavaScript中的运算符使用。

4 深入理解分之结构语句和循环语句。

5 熟练使用数组来完成各种练习。

6熟悉es6的语法、熟练掌握JavaScript面向对象编程。

7DOM和BOM实战练习和H5新特性和协议的学习。

知识点:

1、软件开发流程、算法、变量、数据类型、分之语句、循环语句、数组和函数。熟练运用JavaScript的知识完成各种练习。

2、JavaScript面向对象基础、异常处理机制、常见对象api,js的兼容性、ES6新特性。熟练掌握JavaScript面向对象的开发以及掌握es6中的重要内容。

3、BOM *** 作和DOM *** 作。熟练使用BOM的各种对象、熟练 *** 作DOM的对象。

4、h5相关api、canvas、ajax、数据模拟、touch事件、mockjs。熟练使用所学知识来完成网站项目开发。

第三阶段:数据库和框架实战

阶段目标:

1 综合运用Web前端技术进行页面布局与美化。

2 综合运用Web前端开发框架进行Web系统开发。

3 熟练掌握Mysql、Mongodb数据库的发开。

4 熟练掌握vuejs、webpack、elementui等前端框技术。

5 熟练运用Nodejs开发后台应用程序。

6 对Restful,Ajax,JSON,开发过程有深入的理解,掌握git的基本技能。

知识点:

1、数据库知识,范式,MySQL配置,命令,建库建表,数据的增删改查,mongodb数据库。深入理解数据库管理系统通用知识及MySQL数据库的使用与管理,为Nodejs后台开发打下坚实基础。

2、模块系统,函数,路由,全局对象,文件系统,请求处理,Web模块,Express框架,MySQL数据库处理,RestfulAPI,文件上传等。熟练运用Nodejs运行环境和后台开发框架完成Web系统的后台开发。

3、vue的组件、生命周期、路由、组件、前端工程化、webpack、elementui框架。Vuejs框架的基本使用有清晰的理解,能够运用Vuejs完成基础前端开发、熟练运用Vuejs框架的高级功能完成Web前端开发和组件开发,对MVVM模式有深刻理解。

4、需求分析,数据库设计,后台开发,使用vue、node完成pc和移动端整站开发。于Nodejs+Vuejs+Webpack+Mysql+Mongodb+Git,实现整站项目完整功能并上线发布。

第四阶段:移动端和微信实战

阶段目标:

1熟练掌握Reactjs框架,熟练使用Reactjs完成开发。

2掌握移动端开发原理,理解原生开发和混合开发。

3熟练使用react-native和Flutter框架完成移动端开发。

4掌握微信小程序以及了解支付宝小程序的开发。

5完成大型电商项目开发。

知识点:

1、React面向组件编程、表单数据、组件通信、监听、声明周期、路由、Redux基本概念。练使用react完成项目开发、掌握Redux中的异步解决方案Saga。

2、react-native、开发工具、视图与渲染、api *** 作、Flutter环境搭建、路由、ListView组件、网络请求、打包。练掌握react-native和Flutter框架,并分别使用react-native和Flutter分别能开发移动端项目。

3、微信小程序基本介绍、开发工具、视图与渲染、api *** 作、支付宝小程序的入门和api学习。掌握微信小程序开发了解支付宝小程序。

4、大型购物网站实战,整个项目前后端分离开发;整个项目分为四部分:PC端网页、移动端APP、小程序、后台管理。团队协作开发,使用git进行版本控制。目期间可以扩展Threejs 、TypeScript。

web前端就是您打开网页,看到一切内容、、动态、特效等等这所有的东西都是由web前端来实现的,最开始的web前端都是静态的,内容文字这些,随着互联网的发展现在的web前端有更多的交互效果,功能更加强大。

学习前端的前景还是很好的,工作的也有很多,比如说网页制作、前端制作工程师、网站重构工程师、前端开发工程师、前端架构师等等

web前端

现在5G和大数据的发展,各个企业对web前端的需求会更多,发展会非常的好。

前端三大框架,是Angular、React、Vue,这三个框架现在是最为流行也是最多人用的框架。

React:

1声明式设计:React采用声明范式,可以轻松描述应用。

2高效:React通过对DOM的模拟,最大限度地减少与DOM的交互。

3灵活:React可以与已知的库或框架很好地配合。

优点:

1速度快:在UI渲染过程中,React通过在虚拟DOM中的微 *** 作来实现对实际DOM的局部更新。

2跨浏览器兼容:虚拟DOM帮助我们解决了跨浏览器问题,它为我们提供了标准化的API,甚至在IE8中都是没问题的。

3模块化:为你程序编写独立的模块化UI组件,这样当某个或某些组件出现问题是,可以方便地进行隔离。

4单向数据流:Flux是一个用于在JavaScript应用中创建单向数据层的架构5同构、纯粹的javascript:因为搜索引擎的爬虫程序依赖的是服务端响应而不是JavaScript的执行,预渲染你的应用有助于搜索引擎优化。6兼容性好:比如使用RequireJS来加载和打包,而Browserify和Webpack适用于构建大型应用。它们使得那些艰难的任务不再让人望而生畏。缺点:React本身只是一个V而已,并不是一个完整的框架,所以如果是大型项目想要一套完整的框架的话,基本都需要加上ReactRouter和Flux才能写大型应用。

Vue:

Vue是尤雨溪编写的一个构建数据驱动的Web界面的库,准确来说不是一个框架,它聚焦在V(view)视图层。

它有以下的特性:

1轻量级的框架

2双向数据绑定

3指令

4插件化

优点:

1简单:官方文档很清晰,比Angular简单易学。

2快速:异步批处理方式更新DOM。

3组合:用解耦的、可复用的组件组合你的应用程序。

4紧凑:~18kbmin+gzip,且无依赖。

5强大:表达式无需声明依赖的可推导属性(computedproperties)。

6对模块友好:可以通过NPM、Bower或Duo安装,不强迫你所有的代码都遵循Angular的各种规定,使用场景更加灵活。

缺点:

1新生儿:Vuejs是一个新的项目,没有angular那么成熟。

2影响度不是很大:google了一下,有关于Vuejs多样性或者说丰富性少于其他一些有名的库。

3不支持IE8。

Angular:

Angular是一款优秀的前端JS框架,已经被用于Google的多款产品当中。

它有以下的特性:

1良好的应用程序结构

2双向数据绑定

3指令

4HTML模板

5可嵌入、注入和测试

优点:

1模板功能强大丰富,自带了极其丰富的angular指令。

2是一个比较完善的前端框架,包含服务,模板,数据双向绑定,模块化,路由,过滤器,依赖注入等所有功能;3自定义指令,自定义指令后可以在项目中多次使用。

4ng模块化比较大胆的引入了Java的一些东西(依赖注入),能够很容易的写出可复用的代码,对于敏捷开发的团队来说非常有帮助。

5angularjs是互联网巨人谷歌开发,这也意味着他有一个坚实的基础和社区支持。

缺点:

1angular入门很容易但深入后概念很多,学习中较难理解。

2文档例子非常少,官方的文档基本只写了api,一个例子都没有,很多时候具体怎么用都是google来的,或直接问misko,angular的作者。

3对IE6/7兼容不算特别好,就是可以用jQuery自己手写代码解决一些。

4指令的应用的最佳实践教程少,angular其实很灵活,如果不看一些作者的使用原则,很容易写出四不像的代码,例如js中还是像jQuery的思想有很多dom *** 作。

5DI依赖注入如果代码压缩需要显示声明。

rem由来 :font size of the root element,那么rem是个单位,单位大小由它第一代老祖宗的 font-size 的大小决定。现在前端码农们为了能在各个屏幕上看到一个健康的网页在默默的牺牲着自己的健康,因为不仅要知道rem是个单位,更重要的是要知道怎么能在不同分辨率下呈现的页面都很NB。

事故造成原因:

1px单位在PC上很流行,在手机屏幕上一看,MLGB的,同样的12px却小的跟蚂蚁似的。

2好不容易在iPhone4上调的正常了,换个菊花牌手机,MBD不堪入目了。

3知道了rem的用法,但是html的font-size到底是多少才合适啊啊啊,妈蛋~。

好了,那么现在来解决这些问题。

在解决之前,麻烦各位大婶要了解一些你可能不想了解的东东(警告:不了解这些就不能知道真相哟~):

1 物理像素(physical pixel)

我们看到的每个屏幕都是由一颗颗我们肉眼难以看到的小颗粒(物理像素)组成的。

2逻辑像素

是计算机坐标系统中的一个点,这个点代表一个可以由程序使用的虚拟像素(比如说CSS像素)。

3设备的像素比(device pixel ratio)简称DPR

它的数值体现了物理像素和逻辑像素之间的关系,用公式可以计算出该设备的DPR的大小:

DPR= 物理像素 / 逻辑像素

那么了解了上面这些概念,就可以知道,为什么css在pc上写着font-size=12px;但是换到手机上却变小了?因为DPR啊啊啊,大哥~。

没错,我们在电脑屏幕上的DPR是1,但是手机却不同,可能是它可能是2,也可能是3。获取设备DPR的方法还是有的:

1在JavaScript中,通过windowdevicePixelRatio来获取

2在css中,可以通过-webkit-device-pixel-ratio,-webkit-min-device-pixel-ratio和 -webkit-max-device-pixel-ratio进行媒体查询,对不同DPR的设备,做一些样式适配(这里只针对webkit内核的浏览器和webview)。

本人也在网上看了不少动态设置rem的文章,下面把几个常用的列举出来:

一,用媒体查询来设置html的font-size:

@mediascreen and (min-width:320px) {html{font-size:14px;}} @mediascreen and (min-width:360px) {html{font-size:16px;}} @mediascreen and (min-width:400px) {html{font-size:18px;}} @mediascreen and (min-width:440px) {html{font-size:20px;}} @mediascreen and (min-width:480px) {html{font-size:22px;}} @mediascreen and (min-width:640px) {html{font-size:28px;}}

二、利用js来动态设置

!(function(doc, win){vardocEle = docdocumentElement,        evt ="onorientationchange"inwindow"orientationchange":"resize",        fn =function(){varwidth = docEleclientWidth;            width && (docElestylefontSize =20 (width /320) +"px");        };        winaddEventListener(evt, fn,false);    docaddEventListener("DOMContentLoaded", fn,false); }(document,window));

我要说的是最后一种,也是我认为目前比较好的实现方法:

利用js计算当前设备的DPR,动态设置在html标签上,并动态设置html的font-size,利用css的选择器根据DPR来设置不同DPR下的字体大小(这个方法很不错哦~)

!function(win, lib){vartimer,        doc    = windocument,        docElem = docdocumentElement,        vpMeta  = docquerySelector('meta[name="viewport"]'),        flexMeta = docquerySelector('meta[name="flexible"]'),        dpr  =0,        scale =0,        flexible = libflexible || (libflexible = {});// 设置了 viewport metaif(vpMeta) {consolewarn("将根据已有的meta标签来设置缩放比例");varinitial = vpMetagetAttribute("content")match(/initial\-scale=([\d\]+)/);if(initial) {            scale =parseFloat(initial[1]);// 已设置的 initialScaledpr =parseInt(1/ scale);// 设备像素比 devicePixelRatio}    }// 设置了 flexible Metaelseif(flexMeta) {varflexMetaContent = flexMetagetAttribute("content");if(flexMetaContent) {varinitial = flexMetaContentmatch(/initial\-dpr=([\d\]+)/),                maximum = flexMetaContentmatch(/maximum\-dpr=([\d\]+)/);if(initial) {                dpr =parseFloat(initial[1]);                scale =parseFloat((1/ dpr)toFixed(2));            }if(maximum) {                dpr =parseFloat(maximum[1]);                scale =parseFloat((1/ dpr)toFixed(2));            }        }    }// viewport 或 flexible// meta 均未设置if(!dpr && !scale) {// QST// 这里的 第一句有什么用 // 和 Android 有毛关系 varu = (winnavigatorappVersionmatch(/android/gi), winnavigatorappVersionmatch(/iphone/gi)),            _dpr = windevicePixelRatio;// 所以这里似乎是将所有 Android 设备都设置为 1 了dpr = u ( (_dpr >=3&& (!dpr || dpr >=3))                        3: (_dpr >=2&& (!dpr || dpr >=2))                            2:1)                :1;        scale =1/ dpr;    }    docElemsetAttribute("data-dpr", dpr);// 插入 viewport metaif(!vpMeta) {        vpMeta = doccreateElement("meta");                vpMetasetAttribute("name","viewport");        vpMetasetAttribute("content","initial-scale="+ scale +", maximum-scale="+ scale +", minimum-scale="+ scale +", user-scalable=no");if(docElemfirstElementChild) {            docElemfirstElementChildappendChild(vpMeta)        }else{vardiv = doccreateElement("div");            divappendChild(vpMeta);            docwrite(divinnerHTML);        }    }functionsetFontSize(){varwinWidth = docElemgetBoundingClientRect()width;if(winWidth / dpr >540) {            (winWidth =540 dpr);        }// 根节点 fontSize 根据宽度决定varbaseSize = winWidth /10;        docElemstylefontSize = baseSize +"px";        flexiblerem = winrem = baseSize;    }// 调整窗口时重置winaddEventListener("resize",function(){        clearTimeout(timer);        timer = setTimeout(setFontSize,300);    },false);// 这一段是我自己加的// orientationchange 时也需要重算下吧winaddEventListener("orientationchange",function(){        clearTimeout(timer);        timer = setTimeout(setFontSize,300);    },false);// pageshow// keyword: 倒退 缓存相关winaddEventListener("pageshow",function(e){if(epersisted) {            clearTimeout(timer);            timer = setTimeout(setFontSize,300);        }    },false);// 设置基准字体if("complete"=== docreadyState) {        docbodystylefontSize =12 dpr +"px";    }else{        docaddEventListener("DOMContentLoaded",function(){            docbodystylefontSize =12 dpr +"px";        },false);    }      setFontSize();    flexibledpr = windpr = dpr;    flexiblerefreshRem = setFontSize;    flexiblerem2px =function(d){varc =parseFloat(d) thisrem;if("string"==typeofd && dmatch(/rem$/)) {            c +="px";        }returnc;    };    flexiblepx2rem =function(d){varc =parseFloat(d) /thisrem;if("string"==typeofd && dmatch(/px$/)) {            c +="rem";        }returnc;    }}(window,windowlib || (windowlib = {}));

忘了说了,手机淘宝很多页面用的就是这种方法来适配终端的。

以上就是关于Taro 3.3 alpha 发布:用 ant-design 开发小程序全部的内容,包括:Taro 3.3 alpha 发布:用 ant-design 开发小程序、web前端学会什么内容可以找到工作、求WEB前端开发学习路线等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10116344.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存