演示:
https://jsfiddle.net/eywraw8t/183735/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.loader-wrapper {
position: relative;
height: 20px;
background-color: gray;
width: 100%;
text-align: center;
color: #fff;
}
.loader {
position: absolute;
height: 100%;
background-color: rgba(0, 0, 0, .3);
}
</style>
</head>
<body>
<div id="app">
<div class="loader-wrapper">
<div class="loader" :style="{ width: widthPercentage }"></div>
{{ widthPercentage }}
</div>
<button @click="start">Start</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script>
new Vue({
el: "#app",
data: {
width: 0
},
computed: {
widthPercentage() {
return this.width + "%";
}
},
methods: {
start() {
for (let i = 0; i < 1000000; ++i) {
if (i === 500000) {
this.width = 50;
}
}
}
}
})
</script>
</body>
</html>
请注意,这是非常低效的,因为每次点击都会触发这个巨大的循环。此时,循环10次或1000000次并不重要,因为仍然需要1帧来渲染。不同的是,较大的循环将使该帧的渲染时间更长。