vue中使用指令解决iphonex底部的适配问题

  • 1.全局自动化加载指令
    • 1.1 在src新建directives文件夹,并且新建index.js
    • 1.2 在main.js引入directives/index,用Object.keys()遍历,然后循环,用Vue.directive指定插入指定
  • 2.使用

在网上也看了很多的博客,怎么去解决iphoneX底部自适配的,最通用还是去用css的env(safe-area-inset-bottom)样式去解决,具体的用法我就不多说了,大家可以看下csdn env ,今天在画公司的ui图的时候遇到下面这几种情况:

  1. 距离底部用固定定位或者绝对定位写的
  2. 距离底部用margin-bottom写的
  3. 距离底部用padding-bottom并且带背景色写的

    那么问题来了,刚开始的时候我会想,利用scss中minxin结合css属性env(safe-area-inset-bottom)写成一个混合函数传入参数解决。最终没成功。最后想着还是用指令解决问题,为了后面的人知道怎么用,不用每次添加safe-area-inset-bottom属性,这样的操作。下面就是我实现的具体过程

1.全局自动化加载指令

1.1 在src新建directives文件夹,并且新建index.js


代码如下,特别注意的我采用的是vw的形式去做适配,具体的计算方法为100vw/设计稿的宽度 * 设计稿的元素像素,比如说我们ui的设计稿是375,我一个盒子的宽度是75px,那么我得到自适应宽度为 100vw/375 * 75
type主要是三种传参bottom,padding,margin分别对应我上面的三种情况
src/directives/index.js

/*** @description fitIphoneX 主要是为了适配iphoneX自适配的问题,可以设置padding,maring,bottom* @params setValue 需要设置的值  | type 设置的类型,比如说padding* @useage  v-fitIphoneX="{ type: 'padding', pxNum: 10 }"*/
const fitIphoneX = {bind(el, binding) {let ua = window.navigator.userAgentlet isIos = !!ua.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)let designWidth = 375 // 设计稿高度let iphoneXNum = (binding.value.pxNum || 30) + 34let setValue = (100 / designWidth) * iphoneXNum // 转化成vwif (isIos) {if (window.screen.height === 812 && window.screen.width === 375) {// 在iphonex 中switch (binding.value.type) {case 'padding':el.style.paddingBottom = `${setValue}vw`breakcase 'margin':el.style.marginBottom = `${setValue}vw`breakdefault:el.style.bottom = `${setValue}vw`break}}}}
}export default {fitIphoneX
}

1.2 在main.js引入directives/index,用Object.keys()遍历,然后循环,用Vue.directive指定插入指定

main.js

import directives from './directives'
Object.keys(directives).forEach(item => {// console.log( directives[item])Vue.directive(item, directives[item])
})

2.使用

其实后面如果需要iphonex的顶部适配可以使用动态指令,分是顶部还是底部

<divclass="sticky-box"v-fitIphoneX="{ type: 'padding', pxNum: 10 }">
</div>

这样使用起来还比较简单的。大家可以试一下。

vue中使用指令解决iphonex底部的适配问题相关推荐

  1. 【1】vue中的指令与插值表达式

    为什么要用指令和插值表达式 前面我们已经说到过,在Vue中不直接对DOM进行操作,而是通过数据的改变来改变页面的显示状态.但是如果在HTML中直接像这样设置页面内容,那么改变数据时将无法用到Vue提供 ...

  2. vue中v-model指令的使用之Vue知识点归纳(九)

    本文中描述 vue 中 v-model 指令的基本使用 1 简述 vue 中 v-model 用来获取和设置 表单中的值 2 案例 <!DOCTYPE html> <html lan ...

  3. vue中v-bind指令的使用之Vue知识点归纳(七)

    本文中描述 vue 中 v-bind 指令的基本使用 1 简述 vue 中 v-bind 用来操作 html 元素标签中的属性 2 案例 <!DOCTYPE html> <html ...

  4. vue中v-if指令的使用之Vue知识点归纳(六)

    本文章描述 vue 中 v-if 的基本使用 vue 中 v-show 与 v-if 的区别 1 简述 vue 中 v-if 指令,顾名思义是用来进行条件判断的,直接操作 dom 2 案例 <! ...

  5. vue中v-on指令的使用之Vue知识点归纳(四)

    本文章中描述 v-on 指令的基本使用 点击按钮动态修改数据 1 简述 vue 中 v-on 指令简单点来讲,是用来给元素设置绑定事件. 格式 v-on:事件名称="方法名称" 这 ...

  6. java get请求 数组,浅谈vue中get请求解决传输数据是数组格式的问题

    qs的stringify接收2个参数,第一个参数是需要序列化的对象,第二个参数是转化格式,一般默认格式是给出明确的索引,如:arr[0]=1&arr[1]=2 //indices是index的 ...

  7. js中for(const i in/of arr/obj)和vue中v-for指令的区别

    在js中 var obj = {q:'qqq',w:'www',e:'eee'}var arr1 = [{r:'rrr'},{t:'ttt'},{y:'yyy'}]var arr2 = ['uuu', ...

  8. 教女朋友学习 vue中的指令及其自定义指令

    写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感兴 ...

  9. vue中自定义指令、组件化、生命周期、节流和防抖、获取DOM、mint-ui简介、过渡和动画

    自定义指令: vue中通过directive方法自定义指令,如:自定义一个v-focus指令: <script>Vue.directive('focus', {//通过directive( ...

最新文章

  1. 使用feign调用注解在eureka上的微服务,简单学会微服务
  2. 贝叶斯网络结构学习之K2算法(基于FullBNT-1.0.4的MATLAB实现)
  3. 搭建php帮助中心,帮助中心
  4. 01H5-fe-html5-005插入音频
  5. DALSA线阵CCD相机开发 之 opencv读取图片
  6. 小波的秘密10_图像处理应用:图像增强
  7. JZOJ 3804. 【NOIP2014模拟8.24】小X 的AK 计划
  8. python操作mongodb语法_python 操作MongoDB
  9. Angular Change Detection 的学习笔记
  10. SAP CRM WebClient UI session restart
  11. 16岁的蒙古摔跤手(狼行天下:追寻狼迹内蒙生态行第三天)
  12. Linux 系统应用编程——网络编程(常用命令解析)
  13. 云存储服务器销售,云存储服务器销售
  14. 数据库版本自带的mysql replication双机主从备份安装配置
  15. Ninth season eighth episode,Rachel‘s another sister,how is she???
  16. 明源软件热忱欢迎您的加入---2011年校园招聘
  17. golang 实现苹果内购服务端验证
  18. 最大流 紧急疏散evacuate
  19. Cesium基础知识-添加天空盒
  20. 知乎高赞:无人驾驶什么时候才会凉凉,估计还要多久?

热门文章

  1. 金仓数据库KingbaseES安全指南--5.2. 数据完整性保护
  2. 124-统计学概率论之二项分布
  3. 智慧政务一网通办云平台顶层设计与建设方案
  4. Mybatis错误:Type interface com.dao.UserDao is not known to the MapperRegistry.
  5. 使用预训练语言模型预测阶段:GPU、CPU性能差别【Pegasus】
  6. 这是发生在2017年科技圈那些「不堪回首」的重大失败,每一件都与你有关
  7. 详细的EVE-NG部署方法+EVE各种镜像与模板,附带SCRT+WINSCP等工具提供(VM部署)
  8. Vue实现自动生成二维码并实现复制下载功能:
  9. Java黑皮书课后题第6章:**6.30(游戏:双骰子)掷双骰子游戏是某场景中非常流行的骰子游戏。编写程序,玩这个游戏的变种
  10. 不得不说,这是我面过的最优秀的Linux运维!