vue实现带过渡效果的下拉菜单功能

  

本文实例为大家分享了vue仿写下拉菜单功能,带有过渡效果(移动端),供大家参考,具体内容如下

  

效果图   

 vue实现带过渡效果的下拉菜单功能

  

clickOutside。js点击目标之外的地方,下拉框隐藏

  

代码如下:

        出口const clickOutside={   绑定,绑定(el vnode) {   函数documentHandler (e) {   如果(el.contains (e。target)) {   返回错误;   }   如果(binding.expression) {   binding.value (e);   }   }   埃尔。__vueClickOutside__=documentHandler;   文档。addEventListener(“点击”,documentHandler);   },   update () {},   解开(el绑定){   文档。removeEventListener(“点击”,el.__vueClickOutside__);   删除el.__vueClickOutside__;   }   };      

正文的html如下:

        & lt; div类=癷nfo-select”比;   & lt; div类="选择"比;   & lt; p class=" select-p“@click=皊howSelectUl (s1)“v-clickOutside=癶ideSelectUl”比;   & lt; span>{{问题}}& lt;/span>   & lt; img src=" https://www.yisu.com/zixun/require(“. ./. ./资产/图片/支持/icon_xiala.png”)“alt="比;   & lt;/p>   & lt;过渡name=" slide-fade比;   & lt; div类=" select-ul " v-show=" !祝辞showIssues”;   & lt; div v="(项目、索引)名单”:关键=爸甘北?   & lt; div> {{item.class}} & lt;/div>   & lt; div v=" (item1,我)项目。节点”:关键="我" @click=" getSize (item1, s1 '。在类中,指数(i)”;   & lt; p: class="{活跃:项目==问题}”在{{item1.class}} & lt;/p>   & lt;/div>   & lt;/div>   & lt;/div>   & lt;/transition>   & lt;过渡leave-active-class=" slideOutRight " enter-active-class=皊lideInRight”比;   & lt; p class="动画errP”v-show="的形式。issueErr”在{{form.issueMsg}} & lt;/p>   & lt;/transition>   & lt;/div>   & lt; div类="选择"比;   & lt; p class=" select-p“@click=皊howSelectUl (s2)“v-clickOutside=癶ideSelectUl2”比;   & lt; span> {{issues2}} & lt;/span>   & lt; img src=" https://www.yisu.com/zixun/require(“. ./. ./资产/图片/支持/icon_xiala.png”)“alt="比;   & lt;/p>   & lt;过渡name=癱omponent-fade”模式=罢蕉贰北?   & lt; div类=" select-ul " v-show=? showIssues2”比;   & lt; p v=?项目、索引)childList”: class="{活跃:条目==issues2}”   :关键="指数" @click=" getSize (s2,项目。类,指数)”在{{item.class}} & lt;/p>   & lt;/div>   & lt;/transition>   & lt;过渡leave-active-class=" slideOutUp " enter-active-class=皊lideInUp”比;   类& lt; p=v=岸璭rrP形式。issueErr1”在{{form.issueMsg1}} & lt;/p>   & lt;/transition>   & lt;/div>   & lt;/div>   & lt; div class=" p-bts clearafter”比;   & lt;按钮@click="的形式。issueErr=! form.issueErr”祝辞p1   & lt;按钮@click="的形式。issueErr1=! form.issueErr1”祝辞p2   & lt;/div>      

js代码如下:

        从“模型/clickoutside.js”进口{clickOutside};   出口默认{   数据(){   返回{   catogery:“飞行”,   问题:“选择类别”,   issues2:“选择问题”,   showIssues:没错,   showIssues2:没错,   列表:(   {id: 0,类:“飞行”,节点:[   {类:“1.1 a1111111111111 11111111111111”,节点:[   {类:“问题a1 # 63; "},   {类:“问题a2 # 63; '}   )},   {类:1.2 a2,节点:[   {类:“问题a3 # 63; "},   {类:“问题a4 # 63; '}   )},   )},   {id: 1、类:“酒店”,节点:[   {类:1.1 b1,节点:[   {类:“问题b1 # 63; "},   {类:“问题b2 # 63; '}   )},   {类:1.2 b2,节点:[   {类:“问题b3 # 63; "},   {类:“问题b4 # 63; '}   )},   )},   ),   childList: [],   形式:{   issueMsg:“请选择一个类别”,issueErr:没错,   issueMsg1:“请选择一个问题”,issueErr1:没错,   },   }   },   方法:{   hideSelectUl () {   这一点。showIssues=true;   },   hideSelectUl2 () {   这一点。showIssues2=true;   },   showSelectUl (s) {   如果(s==s1) {   这一点。showIssues=! this.showIssues;   这一点。showIssues2=true;   其他}{   这一点。showIssues=true;   这一点。showIssues2=! this.showIssues2;   }   },   getSize (val,指数,index2) {   如果(s==s1) {   这一点。问题=val;   这一点。showIssues=true;   这一点。catogery=this.list(指数). class;   这一点。(指数)childList=this.list .node [index2] .node;   这一点。issues2=把≡裎侍狻?   }else if (s==s2) {   这一点。issues2=val;   这一点。showIssues2=true;   }   },   },   指示:{   clickOutside,   }   }

vue实现带过渡效果的下拉菜单功能