用Vue JS实现Accordian效果

元图
• 阅读 4451

1 综述

用Bootstrap的CSS部分实现CSS效果,VueJS实现Accordian效果。利用Vue JS的v-showv-if指令,显示或隐藏panel-body

2 过程

  • 构建相应的Component

  • 利用Bootstrap写相应的template

  • 注册Component,完成相关的数据、属性、方法

2.1 构建相应的Component

<div id="app">
 <panel></panel>
</div>

2.2 利用Bootstrap写相应的template

<template id="accordian-template">
 <div class="panel panel-default" >
   <div class="panel-heading">
     <h4 class="panel-title"><a href="">{{body.title}}</a></h4>
   </div>
   <div class="panel-body">
     <p>{{body.content}}</p>
   </div>
 </div>
</template>

2.3 注册Component,完成相关的数据、属性、方法

  1. 为了让数组变为对象,因此我们要给panel设置item属性,并赋值为数组panels,同时在注册compnent是也要声明属性。

    <panel :item="panels"></panel>
    
    Vue.component('panel',{
        template:'#accordian-template',
        props:['item']
      })
    
  2. 实例化Vue,给数组panels赋值,由于v-show指令需要数值变化,不能给相应的值一个全局数据,所以在每一个对象中应该设置show这个数据。

       new Vue({
            el:'#app',
            data:{
              panels:[
                 {title:'Section 1',content:'This is section 1',show:false},
                 {title:'Section 2',content:'This is section 2',show:false},
                 {title:'Section 3',content:'This is section 3',show:false}
              ]
          }
       });
       
  3. 循环panel,每个.panel-body显示与否由show取值决定,当show=true时就显示.panel-body,否则隐藏。点击.panel-title时改变show的值以此来影响.panel-body的现实与隐藏。

    
      <template id="accordian-template">
    <div class="panel panel-default" v-for="body in item">
      <div class="panel-heading" >
        <h4><a href="" @click.prevent="body.show = !body.show">{{body.title}}</a></h4>
      </div>
      <div class="panel-body" v-show="body.show" transition="toggle">
        <p>{{body.content}}</p>
      </div>
    </div>
      </template>
      
  4. .panel-body设置动画效果,需要指明transition=x和设置x.enter,x.leave

       <div class="panel-body" v-show="body.show" transition="toggle">
       <p>{{body.content}}</p>
     </div>
     
     .toggle-enter,.toggle-leave{
             height:0;
             opacity:0;
             padding:0 15px;
        }
       .panel-body{
             transition:all 1s;
             overflow:hidden;
       }
       

3 总结

  1. 将数组转换为对象并取值,需要给component显示声明属性

  2. 每个地方的值需要由body.show获得

  3. component的过度效果,需要定义transition名,并设置相应的-enter,-leave效果

4 用jQuery实现

  • 法一:点击.panel-title时获取相应的[data-target],给id=[data-target]添加或移除.in。这是Bootstrap中的实现方法。其方法有三个class..collapse隐藏元素,.collapse.in显示元素,.collapsing隐藏和显示之间的过渡效果。

  • 法二:直接给id=[data-target]的元素应用animate()函数,并设置height:toggle或直接使用slideToggle()函数。

  • 法三:没有过渡效果。直接给id=[data-target]的元素应用toggle()函数

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
js + css实现点击 波纹效果
有时候我们为了增加用户体验,可能会有一些点击样式类似框架中的haverclass这里简单用jscss实现一个点击效果(类似水波纹)大体思路1.获取点击时鼠标坐标(相对于父元素)2.在当前点创建节点(设置对应的样式)3.设置定时器,移除节点Okjsdom<divclass"box"<button
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
4年前
天哪!几行js代码就可以实现拳皇小游戏
前言今天,我们用原生JS实现一个拳皇人物位置控制的小效果。话不多说,我们赶紧来看下如何实现吧!效果(非静止八神)分别按W、S、A、D键可实现位置移动,并且效果真实。源码html与css很简单,主要是js中有几点需要注意的。<!DOCTYPE html<html lang"en"<head <meta charset"UTF8" <title游
徐小夕 徐小夕
4年前
如何使用css3实现一个类在线直播的队列动画
之前在群里有个朋友问了这样一个问题,就是如何在小程序中实现类似直播平台的用户上线时的队列动画?作为一名前端工程师,解决方案无非以下2种:1.使用javascript根据条件来控制元素的样式实现队列动画2.用纯css3配合数据驱动模型来实现.大家都知道在现代的Web开发中,我们能使用Css实现的效果尽量不要用Js,所以我们应该优先考虑用C
徐小夕 徐小夕
4年前
《前端实战总结》之使用纯css实现网站换肤和焦点图切换动画
今天我们来继续复盘一些工作中常用的css技巧和知识,以便我们可以更加优雅的用css实现富有动感的网站.你将收获网站换肤设计方案介绍:target伪类介绍和用法以及如何使用css实现网站换肤transition动画以及如何用纯css实现焦点图动画效果展示1.网站换肤(https://imghelloworld.ossc
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这