vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > vue自定义按钮单选和多选

vue如何自定义按钮单选和多选

作者:屿-·

这篇文章主要介绍了vue如何自定义按钮单选和多选问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

vue自定义按钮单选和多选

自定义按钮单选

在这里插入图片描述

单选效果图如上

用for循环出每一项的Index作为判断依据,index改变后 把index给num,改变其动态样式。此处的样式用的是tm-vuetify框架里的样式,动态的样式必须写在style里,否则不起作用。

<view class=" flex flex-wrap">
	<view class="type flex-center text-size-n ma-20 mb-5 py-20 px-20" v-for="(item,index) in punishList" :key="index" :class="[num == index ? 'type_tips' : '']" @click="changeIndex(index)">{{item}}</view>
</view>
num:0,
changeIndex(index){
	this.num = index
},
.type{
		background: #f0f0f0;
		color: #7c7c7c;
	}
.type_tips{
	  background: #ffa16a;
	  color: #fff;
	}

自定义按钮多选和反选

在这里插入图片描述

多选效果图如上

利用includes()匹配来实现,

includes的用法:用于搜索筛选关键字 后把数据重新渲染列表

//使用includes方法,查找checkedGroup的选项
<view class=" flex flex-wrap">
<view class="type flex-center text-size-n ma-20 mb-5 py-20 px-20" v-for="item in forceList" @click="handActive(item)" :class="{type_tips:checkedGroup.includes(item)}">{{item}}</view>
</view>
handActive(v,i){ 
	if(this.checkedGroup.includes(v)){
	// 反选的
		this.checkedGroup=this.checkedGroup.filter(function (ele){return ele != v;});
	}else{
	// 选中的
		this.checkedGroup.push(v);
	}
},
.type{
	background: #f0f0f0;
	color: #7c7c7c;
}
.type_tips{
	background: #ffa16a;
    color: #fff;
}

vue div 单选、多选,多选且最多只能选择三个

先把准备工作做好

1. css

.contilor{
	width: 50%;
	margin: 5% auto;
}
.box{
	display: flex;
	flex-wrap: wrap;
}
.item{
	padding: 6px 8px;
	border: 1px solid #3C9CFF;
	margin: 8px 6px 0 10px;
	font-size: 12px;
	border-radius: 6px;
}
.item1{
	background-color: #3C9CFF;
	color: #fff;
}

2. js数据格式

<script type="text/javascript">
let itemData = [{
		id: '1',
		text: '识别性',
		select:false
	},
	{
		id: '2',
		text: '独特性',
		select:false
	},
	{
		id: '3',
		text: '易记性',
		select:false
	},
	{
		id: '4',
		text: '识别',
		select:false
	},
	{
		id: '5',
		text: '学识',
		select:false
	},
	{
		id: '6',
		text: '持久性',
		select:false
	},
	{
		id: '7',
		text: '易传播',
		select:false
	}
];
new Vue({
	el: '#app',
	data() {
		return {
			itemList:itemData
		}
	},
	mounted() {
	},
	methods: {
	}
})
</script>

3. html

<div class="box">
	<div class="item" v-for="(item,i) in itemList" :key="i">
		<span>{{item.text}}</span>
	</div>
</div>

单选

1.效果图

2.html

<div class="box">
	<div class="item" v-for="(item,i) in itemList" :key="i" :class="{'item1':index === i}"
		@click="onSelect(i)">
		<span>{{item.text}}</span>
	</div>
</div>

 3.js

data() {
	return {
		itemList: itemData,
		index: 0,
	}
},
methods:{
    onSelect(i) {
	    this.index = i
    }
}

多选

1.效果图

2.html

<div class="item" v-for="(item,i) in itemList" :key="i" :class="{'item1':item.select}"
	@click="onSelect1(i)">
	<span>{{item.text}}</span>
</div>
</div>

3.js

data() {
	return {
		itemList: itemData
	}
},
methods:{
    onSelect1(i) {
	    this.itemList[i].select = !this.itemList[i].select;
    }
}

多选且最多只能选择三个,选择第四个会出现提示,前面的也可以取消

1.效果图

2.html

<div class="box">
	<div class="item" v-for="(item,i) in itemList" :key="i" :class="{'item1':item.select}"
		@click="onSelect2(i)">
		<span>{{item.text}}</span>
	</div>
</div>

3.js

data() {
	return {
		itemList: itemData,
		chooseData: []
	}
},
methods:{
    onSelect2(i) {
	    let text = this.itemList[i].text;
	    if (!this.itemList[i].select && this.chooseData.length > 2) {
	    	alert("最多只能选择3个")
	   	    return
	    }
	    this.itemList[i].select = !this.itemList[i].select;
	    //选中并且数组小于3则追加
	    if (this.itemList[i].select && this.chooseData.length < 3) {
		    this.chooseData.push(text)
	    }
	    //取消选中
	    if (!this.itemList[i].select) {
		    this.chooseData.splice(this.chooseData.indexOf(text), 1);
	    }
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文