flexible.js
在*.html
的<head>
标签中引入<script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script>
flexible.js
会作如下几件事:css
给*.html
添加内联样式表html
给<html>
设置[data-dpr=""]
属性、font-size
样式vue
[data-dpr=""]
属性的做用:经过属性选择器,设置不一样分辨率下的样式font-size:
的做用:rem
单位的基准尺寸resize
、pageshow
事件来从新设置html.style.fontSize
body.style.fontSize
定义window.lib.flexiblenode
window.lib.flexible = { dpr: number, refreshRem: function, rem2px: function, px2rem: function }
Note:HTML
中无需设置meta#viewport
,flexible.js
会根据window.devicePixelRatio
的值自动添加meta#viewport
。git
假设设置以下<meta name="viewport" content="width=device-width, initial-scale=1.0,user-scalable=no,minimum-scale=1.0,maximum-scale=1.0">
,无论设备是多少的dpr,flexible.js
再也不修改该元数据配置,都会强制认为其dpr是你设置的值。github
Note:在Flexible
中,只对iOS
设备进行dpr
的判断,对于Android
系列,始终认为其dpr
为1正则表达式
scss
定义px2rem的转换~在不使用自动化工具的基础上,没法使用如下处理方式,只能本身计算后再赋值~npm
@function px2em($px, $base-font-size: 16px) { @if (unitless($px)) { @warn "Assuming #{$px} to be in pixels, attempting to convert it into pixels for you"; @return px2em($px + 0px); // That may fail. } @else if (unit($px) == em) { @return $px; } @return ($px / $base-font-size) * 1em; }
rem
咱们但愿文本在不一样
dpr
屏幕下文本字号相同api咱们但愿在大屏手机上看到更多文本less
不但愿出现13px和15px这样的奇葩尺寸
文本仍是使用px做为单位,只不过使用[data-dpr]属性来区分不一样dpr下的文本字号大小
~在不使用自动化工具的基础上,没法使用如下处理方式,只能本身计算后再赋值~
@mixin font-dpr($font-size){ font-size: $font-size; [data-dpr="2"] & { font-size: $font-size * 2; } [data-dpr="3"] & { font-size: $font-size * 3; } }
@include font-dpr(16px);
flexible.js
使用document.readyState API
获取document
的加载状态
document.addEventListener('readystatechange', event => { if (event.target.readyState === 'interactive') { // 等同于DOMContentLoaded 事件 } else if (event.target.readyState === 'complete') { // 表示 load 状态的事件即将被触发。 // 等同于loaded } });
Vue
项目中的实战~项目由@vue/cli@4.5.13建立的~
flexible
安装lib-flexible
npm i -D lib-flexible
项目中引入flexible
# main.js import "lib-flexible/flexible";
px
自动转rem
安装postcss-plugin-px2rem
npm i -D postcss-plugin-px2rem
建立.postcssrc.js
# .postcssrc.js module.exports = { plugins: { 'postcss-plugin-px2rem': { rootValue: 108, //换算基数,设计图尺寸, 默认100 exclude: /(node_module)/, //默认false,能够(reg)利用正则表达式排除某些文件夹的方法,例如/(node_module)\/ mediaQuery: false, //(布尔值)容许在媒体查询中转换px。 minPixelValue: 3, //设置要替换的最小像素值(3px会被转rem)。 默认 0 } } }
凡事有例外
若不想转换rem
,单位使用全大写PX
,如字体
# presets.scss $largeFont: 40PX; $middleFont: 20PX; $standardFont: 14PX; $smallFont: 10PX; @mixin font-dpr($font){ font-size: $font; [data-dpr="2"] & { font-size: $font * 2; } [data-dpr="3"] & { font-size: $font * 3; } }
# example.scss ... @import "../../assets/scss/preset"; .page-title{ @include font-dpr($standardFont); } ...
经过如下命令@vue/cli
会自动安装commitlint
插件并更新pkg
vue add commitlint
swiper
应用安装依赖
npm install swiper vue-awesome-swiper --save
全局注册
# main.js ... import VueAwesomeSwiper from "vue-awesome-swiper"; import "swiper/swiper.scss"; Vue.use(VueAwesomeSwiper, {}); ...
逻辑应用
# Example.vue <template> <swiper ref="mySwiper" :options="swiperOptions"> <swiper-slide v-for="i in 5"> <div> Slide {{i}} </div> <button @click="handleClickItem(i)">点击后才可滑动</button> </swiper-slide> </swiper> </template> <script> export default { name: "Example", data() { return { swiperOptions: { direction: "vertical", }, }; }, methods: { handleClickItem(idx) { // 知足某条件后可滑动 this.swiper.allowSlideNext = true; }, }, computed: { swiper() { return this.$refs.mySwiper.$swiper; }, }, mounted() { // 默认禁止滑动翻页 this.swiper.allowSlidePrev = false; this.swiper.allowSlideNext = false; // 翻页后禁止翻页 this.swiper.on("slideChange", () => { this.swiper.allowSlideNext = false; this.currentIdx = this.swiper.activeIndex; }); }, }; </script>
样式
# example.scss .swiper { &- { &container { height: 100%; } &slide { height: 100%; color: white; } } } button { position: absolute; z-index: 100; bottom: 20PX; width: 100%; text-align: center; }
viewport
的介绍1viewport
的介绍2