用vue写出四个按钮每个按钮匹配一个勾选框。第一行延时0.1秒触发。第二行0.2秒依次类推。然后有个开始按钮。勾选后按钮后。比如勾选了第一行。第三行。每0.1秒点击下第一行按钮。每0.3秒点击下第三行按钮并出现点击动画或者能直观的看到已经点击了。开始按钮点击后变成停止按钮并变色
时间: 2023-08-23 08:03:35 浏览: 148
基于vue实现一个神奇的动态按钮效果
好的,这是一个比较复杂的需求,需要用到一些Vue的知识。下面是示例代码:
```html
<template>
<div>
<div class="row">
<button v-for="(checked, index) in row1" :key="index" :class="{ checked }" @click="toggleCheckbox(1, index)">
{{ checked ? '√' : '' }}
</button>
</div>
<div class="row">
<button v-for="(checked, index) in row2" :key="index" :class="{ checked }" @click="toggleCheckbox(2, index)">
{{ checked ? '√' : '' }}
</button>
</div>
<div class="row">
<button v-for="(checked, index) in row3" :key="index" :class="{ checked }" @click="toggleCheckbox(3, index)">
{{ checked ? '√' : '' }}
</button>
</div>
<div class="row">
<button v-for="(checked, index) in row4" :key="index" :class="{ checked }" @click="toggleCheckbox(4, index)">
{{ checked ? '√' : '' }}
</button>
</div>
<button @click="startStop" :class="{ started, stopped }">{{ buttonText }}</button>
</div>
</template>
<script>
export default {
data() {
return {
row1: [false, false, false, false],
row2: [false, false, false, false],
row3: [false, false, false, false],
row4: [false, false, false, false],
started: false,
stopped: false,
intervalIds: [],
buttonText: '开始'
}
},
methods: {
toggleCheckbox(row, column) {
const rowName = `row${row}`
this[rowName][column] = !this[rowName][column]
},
startStop() {
if (!this.started) {
this.started = true
this.buttonText = '停止'
this.stopped = false
this.intervalIds = [
setInterval(() => this.clickButton(1), 100),
setInterval(() => this.clickButton(2), 200),
setInterval(() => this.clickButton(3), 300),
setInterval(() => this.clickButton(4), 400)
]
} else {
this.started = false
this.buttonText = '开始'
this.stopped = true
this.intervalIds.forEach(id => clearInterval(id))
}
},
clickButton(row) {
const rowName = `row${row}`
const checkedIndices = this[rowName].map((checked, index) => checked ? index : null).filter(index => index !== null)
if (checkedIndices.length > 0) {
const index = checkedIndices[Math.floor(Math.random() * checkedIndices.length)]
this[rowName][index] = false
setTimeout(() => {
this[rowName][index] = true
}, 100)
}
}
}
}
</script>
<style>
button {
width: 50px;
height: 50px;
font-size: 24px;
}
.checked {
background-color: green;
color: white;
}
.started {
background-color: blue;
color: white;
}
.stopped {
background-color: gray;
color: white;
}
</style>
```
这个Vue组件渲染了四行按钮和一个开始/停止按钮。每一行有四个按钮,表示四个勾选框。开始按钮被点击后会触发一个定时器数组,其中每个定时器都会定时调用点击按钮的方法。点击按钮的方法会随机选择一行中已经勾选的按钮进行点击,并且会在点击后0.1秒内将按钮颜色变为绿色表示已经点击过了。开始按钮变成停止按钮,并且会变蓝色表示正在进行中。停止按钮变成灰色表示已经停止。这个组件的大致实现思路是先将每一行的勾选状态保存在一个数组中,然后在点击按钮的方法中随机选择已经勾选的按钮进行点击,并且会在点击后0.1秒内将按钮颜色变为绿色表示已经点击过了。开始/停止按钮的实现是根据组件的状态来判断的。
阅读全文