【uniapp / vue】中动态添加绑定style 或 class

本文详细介绍了在Vue应用中如何使用不同的方式实现动态设置style和class,包括普通对象、数组对象、三元运算、函数返回以及多重值等方法,帮助开发者理解和实践动态样式的应用。

一、style样式动态设置

1.普通对象动态添加(比较常见)


<template>
	<view>
		<view :style="{color:fontColor}"> </view>
		 
		<view :style="{ paddingTop: num + 'px' }"></view>
		 
		<view :style="{backgroundImage: 'url(' + imageURL + ')','background-repeat':'no-repeat', backgroundSize:'100% 100%'}"></view>
	
		//1.动态添加颜色
		//2.动态添加边距
		//3.动态添加背景图片
	</view>
</template>
 
<script>
	export default {
			data() {
				return {
					imageURL: 'https://app-file.beitaichufang.com/img/H5/web/banner/banner23.jpg', //图片
					num:20, //字体大小
					fontColor:'red' //字体颜色
				}
		  }
	}
</script>

2.数组对象动态添加


<template>
	<view>
		<view :style="[{paddingTop: num + 'px'},{color:fontColor}]"></view>    
		
		<view :style="[{'background-image':`url(${imageURL})`},{'background-repeat':'no-repeat'},
		              {'background-size':'100% 100%'}]"></view>
		
		//1.动态添加颜色,动态添加边距
		//2.动态添加背景图片
	</view>
</template>
 
<script>
	export default {
			data() {
				return {
					imageURL: 'https://app-file.beitaichufang.com/img/H5/web/banner/banner23.jpg', //图片
					num:20, //字体大小
					fontColor:'red' //字体颜色
				}
		  }
	}
</script>

3.三元运算动态添加


<template>
	<view>
		<view :style="[{color:(flag?fontColor:'green')},{fontSize:'20px'}]">green</view>
		
		<view :style="[{color:(!flag?fontColor:'green')}]">red</view>
		
		//如果flag为true   颜色就为red色
		//如果flag为false  颜色就为green色
 
 
       <view :style="[flag?{top:searchTop + 'px',width:searchWidth + 'px'}:{top:'100px',width:'100%'}]"></view>
	</view>
</template>
 
<script>
   export default {
		data() {
			return {
				fontColor:'red',
				flag:false,
                searchTop:20,
                searchWidth:100
			}
	  }
}
</script>

4.函数返回

用于根据值不同需要修改的参数过多的时候


<template>
	<view>
		<view :style="getContractStatusStyle(item.rentStatus)">green</view>
	</view>
</template>
 
<script>
   export default {
		data() {
			return {
				fontColor:'red',
				flag:false,
                searchTop:20,
                searchWidth:100
			}
	  	},
       methods:{
           getContractStatusStyle(rentStatus : number) {
               let styleDict = {}
               switch (rentStatus) {
                   case 0:
                  		styleDict = {
							'background': 'rgba(253, 143, 33, 0.2)',
							'color': '#FD8F21'
						}
						break;
					case 1:
						styleDict = {
							'background': 'rgba(80, 93, 255, 0.2)',
							'color': '#505DFF'
						}
						break
					case 2 || 3:
						styleDict = {
							'background': 'rgba(252, 84, 33, 0.2)',
							'color': '#FC5421'
						}
						break
					default:
						styleDict = {
							'background': 'rgba(252, 84, 33, 0.2)',
							'color': '#FC5421'
						}
						break;
               }
               return styleDict
           }
       }
	}
</script>

5.多重值(这种用的不是很多)

<view :style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></view>

二、class动态设置

1.简单三元运算添加(比较常见)


<template>
     <view :class="flag?'flaGreen':'flagRed'">class</view>
</template>
 
<script>
   export default {
		data() {
			return {
				flag:false
			}
	  }
}
</script>
 
<style>
	.flaGreen{
		color: green
	}
	.flagRed{
		color: red
	}
</style>

2.函数返回

用于根据值不同需要修改的参数过多的时候


<template>
	<view>
		<view :class="retrunClass(status)">狀態</view>
	</view>
</template>
 
<script>
   export default {
       data() {
			return {
				status:10
			}
	  }
       methods:{
           retrunClass(Status : number) {
				let strClass = ''
				switch (Status) {
					case 10:
						strClass = 'page1'
						break;
					case 11:
						strClass = 'page2'
						break
					case 12:
						strClass = 'page3'
						break
					default:
						strClass = ''
						break;
				}
				return strClass
			}
       }
	}
</script>
### 使用 Vue3 动态绑定样式的多种方式 #### 一、对象绑定语法 在 UniApp 中,可以利用 Vue3 提供的对象绑定语法来动态设置元素样式。这种方式允许开发者一次性定义多个内联样式属性,并依据 Vue 实例内的数据变化自动调整这些样式[^1]。 ```html <template> <div :style="dynamicStyles">这是一个会变色的文字</div> </template> <script setup> import { ref, computed } from 'vue'; const colorValue = ref('red'); // 定义计算属性返回样式对象 const dynamicStyles = computed(() => ({ color: colorValue.value, })); </script> ``` 上述例子展示了如何创建一个依赖于 `colorValue` 变量的颜色样式。当该变量改变时,文本颜色也会相应发生变化。 #### 二、数组形式绑定类名 除了直接操作内联样式外,还可以采用数组的形式给定一组 CSS 类名称,从而更灵活地控制页面布局与外观[^2]。 ```html <template> <button :class="[isActive ? activeClass : '', baseClass]" @click="toggleActive"> 切换活动状态 </button> </template> <script setup> import { ref } from 'vue'; const isActive = ref(false); const toggleActive = () => (isActive.value = !isActive.value); const activeClass = "active"; const baseClass = "btn"; </script> <style scoped> .active { background-color: green; } .btn { padding: 8px 16px; border-radius: 4px; } </style> ``` 此代码片段说明了怎样根据条件切换不同的CSS类,进而影响按钮的表现效果。 #### 三、集成第三方动画库 Animation.css 对于更加复杂的视觉反馈需求,则可以通过引入像 animation.css 这样的外部资源,在不增加额外逻辑负担的情况下轻松添加丰富的动效支持[^3]。 ```html <!-- 引入 animation.css --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css"/> <template> <!-- 使用 animate__animated 和其他自定义 class 来应用特定的动画 --> <p v-bind:class="{ 'animate__bounce': isBouncing }">弹跳文字!</p> <button @click="isBouncing=!isBouncing">点击让文字开始停止弹跳</button> </template> <script setup> import { ref } from 'vue'; let isBouncing = ref(true); // 控制是否执行 bounce 动画 </script> ``` 这段示例介绍了如何结合使用内置的 `.animate__animated` 类以及来自 animation.css 库的具体动画效果(如本例中的 `bounce`),并通过简单的布尔表达式管理其激活与否的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值