原生JS中的一个业务逻辑如下:
点击li列表,对应的卡牌翻转过来,即:
每个li绑定一个点击事件,然后翻转
需求:让这段逻辑在vue或者uniapp项目中实现
创建一个名为Card的组件,用于表示每个卡片:
<template>
<div class="card" :class="{ flipped: isFlipped }" @click="flipCard">
<div class="front">正面</div>
<div class="back">背面</div>
</div>
</template>
<script>
export default {
data() {
return {
isFlipped: false, // 卡片是否翻转
};
},
methods: {
flipCard() {
this.isFlipped = !this.isFlipped;
},
},
};
</script>
<style scoped>
.card {
width: 100px;
height: 150px;
perspective: 800px;
}
.card.flipped .front {
transform: rotateY(180deg);
}
.card .front,
.card .back {
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
transition: transform 0.6s;
}
.card .front {
background-color: #ccc;
}
.card .back {
background-color: #f00;
transform: rotateY(180deg);
}
</style>
在父组件中使用Card组件,并循环生成多个卡片:
<template>
<div>
<Card v-for="index in cardCount" :key="index" />
</div>
</template>
<script>
import Card from "@/components/Card.vue";
export default {
components: {
Card,
},
data() {
return {
cardCount: 5, // 卡片数量
};
},
};
</script>
不知道你这个问题是否已经解决, 如果还没有解决的话:ps:下面代码示例是uniapp项目
目录结构
在Vue或Uniapp项目中,可以使用以下API实现类似原生JS动态绑定CSS样式的效果:
<template>
<div :class="[isFlipped ? 'flipped' : '']" @click="flipCard"></div>
</template>
<script>
export default {
data() {
return {
isFlipped: false
};
},
methods: {
flipCard() {
this.isFlipped = !this.isFlipped;
}
}
};
</script>
<style>
.flipped {
transform: rotateY(180deg);
}
</style>
<template>
<div :class="cardClass" @click="flipCard"></div>
</template>
<script>
export default {
data() {
return {
isFlipped: false
};
},
computed: {
cardClass() {
return this.isFlipped ? 'flipped' : '';
}
},
methods: {
flipCard() {
this.isFlipped = !this.isFlipped;
}
}
};
</script>
<style>
.flipped {
transform: rotateY(180deg);
}
</style>
<template>
<div :style="cardStyle" @click="flipCard"></div>
</template>
<script>
export default {
data() {
return {
isFlipped: false
};
},
computed: {
cardStyle() {
return {
transform: this.isFlipped ? 'rotateY(180deg)' : ''
};
}
},
methods: {
flipCard() {
this.isFlipped = !this.isFlipped;
}
}
};
</script>
以上是在Vue或Uniapp项目中实现类似原生JS动态绑定CSS样式的常用方法。根据具体需求和场景,可以选择适合的方法进行实现。
在Vue或Uniapp项目中实现点击li列表后对应的卡牌翻转可以按照以下步骤进行:
1,创建一个Vue组件,命名为Card,用于表示每张卡牌。
<template>
<div class="card" :class="{ flipped: flipped }" @click="flipCard">
<div class="card-front">正面</div>
<div class="card-back">背面</div>
</div>
</template>
<script>
export default {
data() {
return {
flipped: false
};
},
methods: {
flipCard() {
this.flipped = !this.flipped;
}
}
};
</script>
<style>
.card {
width: 200px;
height: 300px;
perspective: 1000px;
position: relative;
transition: transform 0.6s;
}
.card.flipped {
transform: rotateY(180deg);
}
.card-front,
.card-back {
width: 100%;
height: 100%;
position: absolute;
backface-visibility: hidden;
}
.card-front {
background-color: #f0f0f0;
display: flex;
justify-content: center;
align-items: center;
font-size: 24px;
}
.card-back {
background-color: #c0c0c0;
display: flex;
justify-content: center;
align-items: center;
font-size: 24px;
transform: rotateY(180deg);
}
</style>
2,在父组件中使用Card组件,并为每个li绑定点击事件。
<template>
<div>
<ul>
<li v-for="(item, index) in items" :key="index" @click="flipCard(index)">
<Card />
</li>
</ul>
</div>
</template>
<script>
import Card from "@/components/Card.vue";
export default {
components: {
Card
},
data() {
return {
items: [1, 2, 3, 4, 5] // 假设有5个卡牌
};
},
methods: {
flipCard(index) {
// 根据索引来翻转对应的卡牌
this.$set(this.items, index, !this.items[index]);
}
}
};
</script>
在以上示例中,每个li元素通过v-for循环生成,并为每个li元素绑定了一个点击事件。点击li元素时,调用flipCard方法来翻转对应卡牌的状态,通过Vue的响应式能力实现视图的更新,从而实现卡牌的翻转效果。