zoukankan      html  css  js  c++  java
  • Vue 基于elementUI的电梯导航

    MIXINS

    elevator.js

    import Velocity from 'velocity-animate';
    import {on, off, isInContainer} from 'element-ui/src/utils/dom';
    import _ from 'lodash'
    
    export default {
        computed: {
            rollWrapper: vm => {
                const {rollWrapper} = vm.$refs
                return rollWrapper.$el ? rollWrapper.$el : rollWrapper
            },
            lazyHandler: vm => _.throttle(vm.handleScrolling, 200)
        },
        data() {
            return {
                isScroll: false
            }
        },
        mounted() {
            on(this.rollWrapper, 'scroll', this.lazyHandler)
            this.$once('hook:hook:beforeDestroy', off.bind(this, this.rollWrapper, 'scroll', this.lazyHandler))
        },
        methods: {
            handleNavChange(v) {
                this.isScroll = true
                const {name} = v
                const {rollWrapper} = this
                const offset = rollWrapper.offsetTop
                const sourceNode = this.$refs[name]
                const target = sourceNode.$el ? sourceNode.$el : sourceNode
                Velocity(target, 'scroll', {
                    container: rollWrapper,
                    duration: 500,
                    offset: -offset,
                    complete: () => this.isScroll = false
                })
            },
            handleScrolling() {
                if (this.isScroll) return
                const {nav} = this
                for (let i = 0; i < nav.length; i++) {
                    const {name} = nav[i]
                    const sourceNode = this.$refs[name]
                    if (!sourceNode) continue
                    const target = sourceNode.$el ? sourceNode.$el : sourceNode
                    if (isInContainer(target, this.rollWrapper)) return this.activeModule = name
                }
            }
        }
    }
    

    USE

    in components script

    import elevator from "@/mixins/elevator";
      mixins: [elevator],
      computed: {
        nav: () => [
          {name: 'itemBaseInfo', label: '基础信息'},
          {name: 'itemSort', label: '分类属性'},
          {name: 'itemSpec', label: 'SKU&价格'},
          {name: 'itemPic', label: '产品图片'},
          {name: 'payAndLimit', label: '支付&限购'},
          {name: 'shipAndDelivery', label: '运费&发货'},
          {name: 'shopOtherConfig', label: '客服&售后&资质'}
        ]
      },
      data() {
          return {
                    activeModule: 'itemBaseInfo'
                  }
      }
    

    in components template container

        <div ref="rollWrapper" class="overflow-y">
          <section ref="itemBaseInfo"></section>
          <section ref="itemSort"></section>
          <section ref="itemSpec"></section>
          <section ref="itemPic"></section>
          <section ref="payAndLimit"></section>
          <section ref="shipAndDelivery"></section>
          <section ref="shopOtherConfig"></section>
        </div>
    

    in components template nav

       <el-tabs v-model="activeModule" stretch @tab-click="handleNavChange">
                <el-tab-pane v-for="item in nav" :key="item.name" :label="item.label" :name="item.name"/>
       </el-tabs>
    
    为之则易,不为则难。
  • 相关阅读:
    form编码方式application/x-www-form-urlencoded和multipart/form-data的区别
    CentOS开启telnet服务
    借助英语搞清会计中“借”/“贷”的含义(转载)
    乘法器的Verilog HDL实现(转载)
    Meth | 关闭mac自带apache的启动
    Meth | Git冲突:commit your changes or stash them before you can merge. 解决办法
    Meth | Git 避免重复输入用户名和密码方法
    Meth | git Please move or remove them before you can merge
    Meth | git 常用命令
    Meth | 小团队git开发模式
  • 原文地址:https://www.cnblogs.com/coderDemo/p/15048270.html
Copyright © 2011-2022 走看看