原创 vuejs 随机显示内容,比如广告
有时候希望广告能随机显示,增加更多的可能性。
大致思路:
将广告HTML代码放在列表里 -> 随机数 -> 随机取列表中的值 -> 使用 v-html 将普通文本渲染为 HTML
将广告HTML代码放在列表里
var link=["<a href='/go/discount/lighthouse' target='_blank' rel='nofollow'> (2核2G4M 限时低至40元/年起!)</a>",
"<a href='/go/discount/2c2g40yuan' target='_blank' rel='nofollow'> (2核2G云服务器首年40元!)</a>",
"<a href='/go/discount/hk2zhe' target='_blank' rel='nofollow'> (全球服务器两折特惠!)</a>"]
1
2
3
2
3
随机数
Math.random()open in new window 函数返回一个浮点数, 伪随机数在范围从0到小于1。
Math.floor()open in new window 函数是向下取整,因为列表取值需要是整数,而 Math.random() 返回的是浮点数,所以需要向下取整为整数。
以下是在 Chrome 控制台上的测试效果:
Math.random()
0.6510836468100687
Math.random() * 3
2.6770986167622253
Math.floor(Math.random() * 3);
1
Math.floor(Math.random() * 3);
0
Math.floor(Math.random() * 3);
0
Math.floor(Math.random() * 3);
2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
随机取列表中的值
用上一步生成随机数,在这里直接取列表的值。
number = Math.floor(Math.random() * 3);
2
link[number]
"<a href='/go/discount/hk2zhe' target='_blank' rel='nofollow'> (全球服务器两折特惠!)</a>"
1
2
3
4
5
2
3
4
5
使用 v-html 将普通文本渲染为 HTML
由于 JS 中存储的是 HTML,把 普通文本渲染为 HTML 需要使用 v-htmlopen in new window
<span v-html="AD"></span>
这个 span 的内容将会被替换成为 AD property 的值,直接作为 HTML,即忽略解析 property 值中的数据绑定。
完整示例代码
<template>
<div>
<br />
本站运行于 <img height=20 width=20 alt="腾讯云" src="/tencentcloud.svg"> 腾讯云
<span v-html="AD"></span>
</div>
</template>
<script>
export default {
name: "Home",
data(){
return{
AD: "",
}
},
methods:{
getData(){
var that=this
var link=["<a href='/go/discount/lighthouse' target='_blank' rel='nofollow'> (2核2G4M 限时低至40元/年起!)</a>",
"<a href='/go/discount/2c2g40yuan' target='_blank' rel='nofollow'> (2核2G云服务器首年40元!)</a>",
"<a href='/go/discount/hk2zhe' target='_blank' rel='nofollow'> (全球服务器两折特惠!)</a>"
]
var number = Math.floor(Math.random() * 3)
that.AD = link[number]
}
},
mounted(){
this.getData();
},
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
效果如下,多刷新几次~