vue.js下拉框的实现
要求:1.下拉框基础功能 2.清除键 3.下拉框动画效果
实现:
1.基础功能
v-for="lis in testData"
:key="lis.id"
@click="write(lis.value)"
>
{{ lis.name }}
div写出基本框架,循环创建无序列表,充当下拉框内容,通过点击div触发功能函数
2.下拉框动画效果
#selectImg {
position: absolute;
top: 1px;
right: 0px;
cursor: pointer;
transform: rotate(0deg);
transition: all 0.3s ease;
}
#selectImg1 {
position: absolute;
top: 1px;
right: 0px;
cursor: pointer;
transform: rotate(180deg);
transition: all 0.3s ease;
}
给下拉框图标写两个css样式,用Transition实现两css样式切换过渡时的动画效果,两样式不同的地方就在于用rotate改变了旋转角度,这配合transition的切换时过渡效果可实现旋转动画
3.清除键
clear() {
this.value=null;
this.judgeIcon = false;
},
点击清除图标后调用清除函数,函数把写在下拉框中的value改为空,把清除图标的展示改为false,以此实现清除效果。
完整代码
v-for="lis in testData"
:key="lis.id"
@click="write(lis.value)"
>
{{ lis.name }}
export default {
name: 'PullDown',
data() {
return {
testData: [
{
id:100,
name: '北京',
value: '0',
},
{
id:200,
name: '上海',
value: '1',
},
{
id:300,
name: '广州',
value: '2',
},
],
judgeItem: false,
judgeIcon: false,
value: null,
}
},
mounted() {},
methods: {
write(val) {
//console.log(id , "key");
//console.log("index" , index);
//console.log("其实这样可以的吧",id);
this.value = this.testData[val].name;
if (this.judgeItem == false) {
var selectImg = document.getElementById('selectImg')
} else {
var selectImg = document.getElementById('selectImg1')
}
//var lis = document.getElementsByTagName('li') //伪数组
this.judgeItem = false;
selectImg.id = 'selectImg';
icon.innerHTML =
''
this.judgeIcon = true;
},
changeImg() {
if (this.judgeItem == false)
var obj = document.getElementById('selectImg')
else var obj = document.getElementById('selectImg1')
if (this.judgeItem == false) {
this.judgeItem = true
obj.id = 'selectImg1'
} else {
this.judgeItem = false
obj.id = 'selectImg'
}
},
cot_ChangeImg() {
if (this.judgeItem == false)
var obj = document.getElementById('selectImg')
else var obj = document.getElementById('selectImg1')
if (this.judgeItem == false) {
this.judgeItem = true
obj.id = 'selectImg1'
} else {
this.judgeItem = false
obj.id = 'selectImg'
}
},
clear() {
this.value=null;
this.judgeIcon = false;
},
},
}
* {
margin: 0;
padding: 0;
}
#main {
position: relative;
width: 280px;
height: 42px;
}
#content {
text-align: left;
width: 280px;
height: 42px;
line-height: 42px;
padding-left: 10px;
background: rgb(255, 255, 255);
border-radius: 2px;
border: 1px solid rgb(221, 221, 221);
font-size: 16px;
font-family: MicrosoftYaHei;
color: rgb(51, 51, 51);
cursor: pointer;
}
#selectImg {
position: absolute;
top: 1px;
right: 0px;
cursor: pointer;
transform: rotate(0deg);
transition: all 0.3s ease;
}
#selectImg1 {
position: absolute;
top: 1px;
right: 0px;
cursor: pointer;
transform: rotate(180deg);
transition: all 0.3s ease;
}
#selectImg2 {
position: absolute;
top: 10px;
right: 50px;
cursor: pointer;
}
#selectItem {
display: 'none';
border: 1px solid #eee;
width: 290px;
height: 100px;
}
#selectItem ul {
list-style: none;
}
#selectItem ul li {
height: 30px;
line-height: 30px;
padding-left: 10px;
cursor: pointer;
}
#selectItem ul li:hover {
background-color: #f5f7fa;
}
占地面积比较大的
参考阅读
发表评论