Vue.js动态改变样式

您所在的位置:网站首页 js更改样式 Vue.js动态改变样式

Vue.js动态改变样式

2023-10-25 08:51| 来源: 网络整理| 查看: 265

动态改变样式

我们经常有这样的需求,就是用js控制css。但是我们知道js只能控制DOM层和BOM层,没有办法控制写入CSS文件。可是我们有时候偏偏需要改变样式怎么办呢?我们有两种方法:

动态改变style属性值动态切换class类名

嗯嗯,没错。虽然我们不能用js直接操作css样式表,但是我们可以控制元素的样式属性嘛,class和style都是属性值,看起来有搞头呀,话不多说,开始了!!!

控制style样式

1.使用样式对象

html代码

js代码

var app = new Vue({ el: '#app', data: { myStyle: { position: "relative", width: 100 + 'px', height: 100 + 'px', backgroundColor: "red", } } })

直接使用样式对象来助阵,有没有学到呢?

注意style样式中带-的,在对象中-后面的要大写。background-color要写成backgroundColor

2.使用{}写入样式对象

html代码

你好Vue.js Vue.js

js代码

var app = new Vue({ el: '#app', data: { color: '#FF0000', bg: 'pink' } })

注意了:background-color要写成backgroundColor。因为key值不可能有-

3.使用()嵌入三目表达式

html代码

布尔表达式

js代码

var app = new Vue({ el: '#app', data: { isBold:true, opition: false, color: '#00FF00', } })

可以在圆括号中嵌入布尔表达式,可以实现一个简单的控制样式选择的功能,有没有学到呢?

4.使用对象数组进行样式覆盖

表达式: [{样式对象1},{样式对象2},…] 后面的样式会覆盖前面的样式

代码示例

html代码

覆盖样式

js代码

var app = new Vue({ el: '#app', data: { color1: '#00FF00', color2:'#0000FF', } })

最终会显示#0000FF(蓝色),数组对象后面的会覆盖前面的。有没有学到呢?

控制class属性

1.使用对象控制

语法:{类名1:布尔值1,类名2:布尔值2} 当布尔值为true整个类生效,否则就不生效

例子1:{blue: true,big:true} 这个时候blue、big这两个类都会作用在元素上,不过big在blue的后面

例子2:

请看下面这个示例

上述HTML代码最终渲染的结果是:

class和:class并不冲突,他们是追加关系

示例代码

css代码

.normal{ color:white; } .red{ color: red; } .large{ font-size: 50px; }

html代码

改变class

js代码

var app=new Vue({ el:'#app', data(){ return{ op:true } } })

看下效果:

注意看上面图片div上的class,class=“normal red large”

2.使用三目表达式控制

上面的方法看起来已经很不错了,它的思想需要写class和:class配合,产生层叠覆盖,从而达到切换样式的效果。 不过我们的三目表达式是切换样式的大拿,它要比上面的方法强大的多

我们看它的语法格式

:class=“布尔值 ? ‘类1’ : ‘类2’”

如果布尔值为true,那么选择类1,为false则选择类2

我们接下来演示的案例是一个小型综合案例,它实现的是心跳效果,大家可以仔细看看

代码示例

css代码:

*{ padding: 0; margin: 0; } html,body{ display: flex; width: 100%; height: 100%; } div{ width: 200px; height: 200px; border-radius: 50%; margin: auto; background-color: #FF0000; } .red{ color: red; } .large{ font-size: 18px; transform: scale(3); transition: all 3s; } .normal{ font-size: 18px; transform: scale(1); transition: all 3s; }

html代码

js代码

var app=new Vue({ el:'#app', data(){ return{ msg:'HelloWorld', control:false } }, created(){ setInterval(()=>{ this.control=!this.control },300) } })

效果:

vue切换样式的心跳效果



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3