1.新建rem.js文件
(function(doc, win) {
let docEl = doc.documentElement,
resizeEvt ='orientationchange' in window ?'orientationchange' :'resize',
recalc =function() {
let clientWidth = docEl.clientWidth
if ( !clientWidth )return
if ( clientWidth ===320 ) {
docEl.style.fontSize =24 * (clientWidth /320) +'px'
}
else {
docEl.style.fontSize =20 * (clientWidth /320) +'px'
}
}
if ( !doc.addEventListener )return
win.addEventListener(resizeEvt, recalc, false)
doc.addEventListener('DOMContentLoaded', recalc, false)
})(document, window)
2,将文件引入到main.js执行
html 元素是文档的根元素,对html设置了字体大小,其子元素会继承html字体的大小。
不同的浏览器默认有的默认html的字体是16px,有的是14px。
同时浏览器字体的大小还会受到你自己在手机里配置的系统字体大小的影响。
这么多因素,如果只靠css里配置html字体大小,子元素基于html的rem是不能保证在不同的手机端适配的。
所以可以通过js动态来计算html应该配置多大的字体。
<script>
function htmlFontSize() {
var h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0)
var w = Math.max(document.documentElement.clientWidth, window.innerWidth || 0)
var width = w >h ? h : w
width = width >720 ? 720 : width
var fz = ~~(width * 100000 / 36) / 10000/2
document.getElementsByTagName("html")[0].style.cssText = 'font-size: ' + fz + "px"
var realfz = ~~(+window.getComputedStyle(document.getElementsByTagName("html")[0]).fontSize.replace('px', '') * 10000) / 10000
if (fz !== realfz) {
document.getElementsByTagName("html")[0].style.cssText = 'font-size: ' + fz * (fz / realfz) + "px"
}
}
htmlFontSize()
</script>
在js计算出html的字体大小以后,就可以在这个基础上配置各子元素的字体大小了。
html的字体大小设置为font-size100px原因:
html{font-size:100px}
h1{font-size: 0.16rem//100*0.16=16px }
.cc{font-size:0.14rem//14px}
又为什么要把html的font-size设置成50px:
因为设备像素比有2的,还有3的,我们按照设备像素比是2的开发,如果html{font-size:50px}那么设计稿ui中得头部header的高度是86px:height:0.86rem.(即:50px*0.86rem=43px,那么到了设备像素比是2的设备上,header的高度就是86px)这样就省去了除以2的计算。
sectionsColor:[‘green‘,‘orange‘,‘red‘,‘lime‘]//设置配景颜色
可以为每一个section设置background-color属性
controlArrows:
界说是否通过箭头来控制slide幻灯片,默认为true,当我们设置为false,则幻灯片摆布的箭头消掉,在移动端上我们可以通过滑动来控制幻灯片
verticalCentered:
每一页的内容是否垂直居中,默认为true
resize:
字体是否跟着窗口缩放而缩放,默认为false
scrollingSpeed:
滚动速度,单位为毫秒,默认为700
anchors:
界说锚链接,默认值是[]。有了锚链接,用户可以快速打开定位到某一页面。
注意界说锚链接的时候,值不要和页面中任意的id或name不异,尤其在IE下,而且界说时不需要加#
lockAnchors:
是否锁定锚链接,默认为false,若设置为true,则界说的锚链接就没有效果,使用较少
easing:
界说页面section滚动的动画方法,默认为easeInOutCubic,如果改削则需引入jquery.easings插件,或者jquery ui.
css3:
是否使用CSS3 transforms来实现滚动效果,默认为true。可提高撑持css3的浏览器(如移动设备等的速度),若浏览器不撑持css3,则会使用jquery来取代css3实现滚动效果。(传说中的优雅降级)
loopTop:
滚动到最顶部后是否持续滚动到底部,默认false
loopBottom:
滚动到最底部后是否持续滚动回顶部,默认false
loopHorizontal:
横向slide幻灯片是否循环滚动,默认为true
autoScrolling:
是否使用插件的滚动方法,默认为true,变为false则会呈现浏览器自带的滚动条,将不会按页滚动,而是凭据滚动条的默认行为来滚动
scrollBar:
是否包罗滚动条,默认为false。设置为true,则呈现浏览器自带的滚动条,页面滚动还是按页滚动,但滚动条的默认行为也有效
paddingTop/paddingBottom:
设置每一个section顶部和底部的padding,默认都是0。一般如果需要设置一个固定在顶部或者底部的菜单、导航、元素等,可以使用这两个配置项。
fixedElements:
固定的元素,默认为null,需要配置一个jquery选择器。在页面滚动的时候,fixedElements设置的元素固定不动。
keyboardScrolling:
是否可以使用键盘标的目的键导航,默认为true。
touchSensitivity:
在移动设备中滑动页面的敏感性,默认为5,是按百分最近衡量,最高为100,越大滑动越难
continuousVertical:
是否循环滚动,默认为false。如果为true,则页面会循环滚动,它不会像loopTop和loopBottom那样呈现跳动。
(它和loopTop、loopBottom不兼容,不要同时设置)
animateAnchor:
锚链接是否可以控制滚动动画,默认为true。若为false,则通过锚链接定位到某个页面显示不再有动画效果。
recordHistory:
是否记录历史,默认true。可以记录页面滚动的历史,通过浏览器的前进撤退退却来导航。
如果设置了autoScrolling:false,那么这个配置也将被封锁。
menu:
绑定菜单,设定的相关属性与anchors的值对应后,菜单可以控制滚动,默认为false。可以设置为菜单的jquery选择器