应用技术:

1、VUE的transition

2、CSS 变量

HTML代码:

1 <div id="app">
 2         <div class="collapse">
 3             <div class="collapse-item" v-for="(item,inx) in list" :key="item" :class="{'is-active':activeNames.indexOf(inx)>-1}">
 4                 <div class="collapse-item-tab" @click.prevent="handleChange(event,inx)">{{item.title}}<i class="wbicon"></i></div>
 5                 <transition name="my" @enter="enter">
 6                     <div class="collapse-item-wrap" v-show="activeNames.indexOf(inx)>-1">
 7                         <div class="collapse-item-content" v-html="item.content"></div>
 8                     </div>
 9                 </transition>
10             </div>
11         </div>
12 </div>

JS代码:

var list = [{
        'title': '一致性 Consistency',
        'content': '<div>与现实生活一致:与现实生活的流程、逻辑保持一致,遵循用户习惯的语言和概念;</div><div>在界面中一致:所有的元素和结构需保持一致,比如:设计样式、图标和文本、元素的位置等。</div>'
    }, {
        'title': '反馈 Feedback',
        'content': '<div>控制反馈:通过界面样式和交互动效让用户可以清晰的感知自己的操作;</div><div>页面反馈:操作后,通过页面元素的变化清晰地展现当前状态。</div>'
    }, {
        'title': '效率 Efficiency',
        'content': '<div>简化流程:设计简洁直观的操作流程;</div><div>清晰明确:语言表达清晰且表意明确,让用户快速理解进而作出决策;</div><div>帮助用户识别:界面简单直白,让用户快速识别而非回忆,减少用户记忆负担。</div>'
    }, {
        'title': '可控 Controllability',
        'content': ' <div>用户决策:根据场景可给予用户操作建议或安全提示,但不能代替用户进行决策;</div><div>结果可控:用户可以自由的进行操作,包括撤销、回退和终止当前操作等。</div>'
    }, ]
    new Vue({
        el: '#app',
        data: {
            activeNames: [],
            list: list
        },        
        methods: {
            handleChange(e, inx) {
                if (this.activeNames.indexOf(inx) > -1) {
                    var i = this.activeNames.indexOf(inx)
                    this.activeNames.splice(i, 1)
                } else {
                    this.activeNames.splice(0, 0, inx)
                }
                console.log(this.activeNames)
            },
            enter(el) {
                var h= el.scrollHeight
                el.style.setProperty('--h', h + 'px')

            }
        }
    })