uni-app如何用JS动态修改scss样式变量

 更新时间:2024年07月09日 09:46:22   作者:CCC1115  
对于uni-app中的组件,可以通过修改它们的样式来自定义它们的外观,下面这篇文章主要给大家介绍了关于uni-app如何用JS动态修改scss样式变量的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

需求:

1、 当H5嵌入到APP时,使用H5自身的头部,需要兼容手机自带的navbar高度,因此在嵌入APP时,需要固定H5 navbar距离手机自带头部高度:$uni-head:44px; 而paging-head-top是由于z-paging定位导致会覆盖或高度不适配当前navbar,所以设置88px

2、 当H5嵌入到H5时,类似于使用手机浏览器打开的页面,就不需要固定距离手机自带的头部高度。因此需要根据环境动态修改scss定义的变量。所以需要根据嵌入的环境进行判断并动态控制样式。即:H5嵌入APP需要固定距离手机顶部高度,H5嵌入H5不需要固定该高度。

未增加距离手机顶部高度时(左:H5嵌入APP)以及已增加距离手机顶部高度(右:H5嵌入H5)

方案一:

1、在scss文件中定义变量和默认值:如uni.scss

$uni-head: var(--uni-head, 44px); // 默认值 44px
$paging-head-top: var(--paging-head-top, 88px); // 默认值 88px

2、js文件中业务判断并修改变量:main.js

// 通过 User Agent中是否含有有Html5Plus、uni-app、app判断 嵌入到哪个环境中:
if (!uni.getSystemInfoSync().ua.includes('app')) { // 嵌入到h5
  document.getElementsByTagName('body')[0].style.setProperty('--uni-head', '0');
  document.getElementsByTagName('body')[0].style.setProperty('--paging-head-top', '44px');
}

// 或者通过 window.plus 判断: 
if(window.plus){ // 存在则是嵌入到APP

}else{ // 不存在则是其他环境 

}

结果展示:

H5嵌入APP(左:增加距离手机顶部高度44px);H5嵌入H5(右:未增加距离手机顶部高度)

方案二:可结合vuex进行动态修改

1、在Vuex store中定义对应样式变量

// 在 Vuex store 中定义
const store = new Vuex.Store({
    state: {
        styleVars: {
            uniHeight: '44px', // 默认值
        },
    },
    mutations: {
        setStyleVar(state, { key, value }) {
            state.styleVars[key] = value;
        },
    },
});

2、在组件中使用计算属性绑定样式

<template>
    <view :style="{ height: heightVar }">
        <!-- 组件内容 -->
    </view>
</template>

<script>
export default {
    computed: {
        heightVar() {
            return this.$store.state.styleVars.uniHeight;
        },
    },
};
</script>

多页面使用到该变量时可以将其定义成全局变量:main.js

Vue.prototype.uniHeight = store.state.styleVars.uniHeight;
// 通过 User Agent中是否含有有Html5Plus、uni-app、app判断 嵌入到哪个环境中:
if (!uni.getSystemInfoSync().ua.includes('app')) { // 嵌入到h5
  // 更新全局样式变量
  Vue.prototype.$store.commit('setStyleVar', { key: 'uniHeight', value: '0px' });
}

组件中使用:

<template>
    <view :style="{ height: uniHeight }">
        <!-- 组件内容 -->
    </view>
</template>

3、更新全局样式变量

this.$store.commit('setStyleVar', { key: 'uniHeight', value: '0px' });

总结 

到此这篇关于uni-app用JS动态修改scss样式变量的文章就介绍到这了,更多相关JS动态修改scss样式变量内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • js 数组倒序排列的具体实现

    js 数组倒序排列的具体实现

    有时候需要将数组类型变量内的元素颠倒一下顺序再输出,本文就详细的介绍一下,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • js漂浮广告实现代码

    js漂浮广告实现代码

    js漂浮广告实现代码,本质上就是一个来回滚动的小图片,也是一种广告形式,需要的朋友可以收藏下
    2015-08-08
  • 微信小程序中的behaviors

    微信小程序中的behaviors

    behaviors是用于组件间代码共享的特性, 类似一些编程语言中的'mixin'或者'traits',这篇文章主要介绍了微信小程序中的behaviors,需要的朋友可以参考下
    2024-08-08
  • 微信小程序中插入激励视频广告并获取收益(实例代码)

    微信小程序中插入激励视频广告并获取收益(实例代码)

    这篇文章主要介绍了微信小程序中插入激励视频广告并获取收益,通过代码给大家介绍了如何插入及注意事项,需要的朋友可以参考下
    2019-12-12
  • ES6中Array.find()和findIndex()函数的用法详解

    ES6中Array.find()和findIndex()函数的用法详解

    ES6为Array增加了find(),findIndex函数。find()函数用来查找目标元素,找到就返回该元素,找不到返回undefined,而findIndex()函数也是查找目标元素,找到就返回元素的位置,找不到就返回-1。下面通过实例详解,需要的朋友参考下吧
    2017-09-09
  • eslint 的三大通用规则详解

    eslint 的三大通用规则详解

    这篇文章主要介绍了eslint 的三大通用规则详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • 详解如何webpack使用DllPlugin

    详解如何webpack使用DllPlugin

    这篇文章主要介绍了详解如何webpack使用DllPlugin,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Java 生成随机字符的示例代码

    Java 生成随机字符的示例代码

    这篇文章主要介绍了Java 生成随机字符的示例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • javascript读写XML实现广告轮换(兼容IE、FF)

    javascript读写XML实现广告轮换(兼容IE、FF)

    最近更新网站首页广告,ASP.NET的广告控件很容易实现这点,可首页是静态页面,联想广告控件的原理决定采用javascript+xml实现这点方面配置,更新广告时只要更新xml即可,方便了广告轮换
    2013-08-08
  • 输入npm run xxx后执行原理深入解析

    输入npm run xxx后执行原理深入解析

    这篇文章主要为大家介绍了输入npm run xxx后执行原理深入解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07

最新评论