uni、js——点击与禁用(不可点击)、动态样式class

案例

没约满的时间可以点击进行选择,约满的就不能选择了。选择完之后变色变字。

核心思想就是创建一个第三方变量存起来,点击谁就存到第三方,在根据这个进行判断。

代码

javascript 复制代码
<template>
	<view class="content">
		<view class="list">
			<block v-for="(item,index) in list" :key="index">
				<view @click="change(item)" :class="{
					'item':true,
					'orangeBg': item.id === checkMonth.id,
					'garyBg': item.display===0,
					'blueBg': item.display===1}">
					<view>{{item.time}}</view>
					<!-- 写法一 -->
					<!-- <view>{{item.id === checkMonth.id?'已选择':item.display == 0?'约满':'可约'}}</view> -->
					<!-- 写法二 -->
					<view v-if="item.id === checkMonth.id">已选择</view>
					<view v-else>{{item.display == 0?'约满':'可约'}}</view>
				</view>
			</block>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				type: 1,
				list: [ {
					id: 1,
					time: "00:30",
					display: 1
				}, {
					id: 2,
					time: "01:00",
					display: 0
				}, {
					id: 3,
					time: "01:30",
					display: 1
				}, {
					id: 4,
					time: "02:00",
					display: 1
				}, {
					id: 5,
					time: "02:30",
					display: 1
				},{
					id: 6,
					time: "03:00",
					display: 0
				}],
				checkMonth: {}, //·选中的年月份
			}
		},
		onLoad(options) {
			this.type = options.type
		},
		methods: {
			change(item) {
				if (!item.display) {
					uni.showToast({
						title:"不可点击,点击也没效果",
						icon:'error',
						duration:400
					})
					return
				}
				console.log("可点击");
				this.checkMonth = item //当前选中的模块
				console.log(this.checkMonth);
			}
		}
	}
</script>

<style>
	.list {
		width: 800rpx;
		display: flex;
		align-items: center;
		flex-wrap: wrap;
	}

	.item {
		width: 200rpx;
		height: 200rpx;
		border: 1px solid red;
	}

	.grayBg {
		background-color: #cccccc;
	}

	.blueBg {
		background-color: skyblue;
	}

	.orangeBg {
		background-color: #FE9202;
	}
</style>

点击与禁用

javascript 复制代码
if (!item.display) {
	uni.showToast({
		title:"不可点击,点击也没效果",
		icon:'error',
		duration:400
	})
	return
}

点击之后,满足禁用条件直接return

动态样式

javascript 复制代码
:class="{
	'item':true,
	'orangeBg': item.id === checkMonth.id,
	'garyBg': item.display===0,
	'blueBg': item.display===1
}"
值为true的代表,这个样式一直存在【比如该item样式内含宽高等的固定样式】
2、3、4行为 满足条件的即显示对应的样式
相关推荐
snow@li15 分钟前
web:前端500知识点/速查手册
前端
kyriewen2 小时前
今年裁了16万技术人——但字节前端岗反而涨了23%
前端·javascript·面试
用户059540174462 小时前
把 AI Agent 记忆存储验证从 40 分钟手测压到 3 分钟,pytest + Docker 这套组合太顶了
前端·css
stereohomology2 小时前
MS Edge很多事的一点是把地址栏复制的地址自动转标题文本
前端·edge
imaol12 小时前
链表 -- 环链表
java·前端·链表
imaol13 小时前
链表 -- 双向链表
java·前端·链表
东风破_3 小时前
大前端手里的 Next.js:从 #root 到 SEO,一份 HTML 的两种命运
前端·后端
IT_陈寒3 小时前
Vue的v-for不听话?我被这个Key的坑整懵了
前端·人工智能·后端
王林不想说话3 小时前
ES6 到 ES2026 全面进阶指南:新特性、原理、示例与工程落地
前端·javascript·面试
用户43523713814934 小时前
🚀 Vue3 + TypeScript 学习笔记:从泛型 T 到 Promise<T>,终于搞懂了 keyof 和 typeof
前端