Vue练习三十六:05_01_模拟select控件
Demo 在线地址:
https://sx00xs.github.io/test/36/index.html
---------------------------------------------------------------
ide: vscode
文件格式:.vue
解析:(待补)
<template>
<div class="search">
<div class="box" v-clickoutside="handleClose">
<form>
<span class="select" @click.prevent="handleClick">{{message}}</span>
<a href="#">搜索</a>
</form>
</div>
<ul class="sub" v-show="show">
<li v-for="item in lists" :key="item.mes" :class="{hover:item.isActive}"
@mouseover="handleOver(item)"
@mouseout="handleOut(item)"
@click="handleSubClick(item)"
>
{{item.mes}}
</li>
</ul>
</div>
</template>
<script>
export default {
data(){
return{
message:'请选择游戏名称',
show:false,
lists:[
{
mes:'地下城与勇士',
isActive:false
},
{
mes:'魔兽世界(国服)',
isActive:false
},
{
mes:'魔兽世界(台服)',
isActive:false
},
{
mes:'热血江湖',
isActive:false
},
{
mes:'神鬼传奇',
isActive:false
},
{
mes:'大话西游II',
isActive:false
},
{
mes:'QQ幻想世界',
isActive:false
},
]
}
},
methods:{
handleClose(){
this.show=false
},
handleClick(){
this.show=this.show===false ? true : false
},
handleOver(item){
item.isActive=true
},
handleOut(item){
item.isActive=false
},
handleSubClick(item){
this.message=item.mes;
this.show=false
},
},
directives:{
clickoutside:{
bind(el,binding,vnode){
function documentHandler(e){
if(el.contains(e.target)){
return false
}
if(binding.expression){
binding.value(e)
}
}
el.__vueClickOutside__=documentHandler;
document.addEventListener('click',documentHandler);
},
unbind(el,binding){
document.removeEventListener('click',el.__vueClickOutside__);
delete el.__vueClickOutside__;
}
}
}
}
</script>

浙公网安备 33010602011771号