滑动自定义指令

15 篇文章 0 订阅
10 篇文章 0 订阅

效果图:
在这里插入图片描述

代码(template):


<template>
  <div class="scrollAnimation">
    <ul v-scroll-height height="3" speed1='1000' speed2='500' isEnd="true" >
      <li
        class="list_item"
        :class="{ bg: index == current }"
        v-for="(item, index) in items"
        :key="item.id"
      >
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  directives: {},
  data() {
    return {
      items: [],
      current: 0,
      timer: null,
      show: true,
      parentHeight: "",
      childHeight: "",
      totalPage: "",
      // rotationTime: {
      //   //  轮播的时间
      //   time: 10000, //  轮播间隔时间
      //   leaveAndGoTime: 3000, // 鼠标进入后离开,轮播的间隔时间
      //   animateTime: 1000, // 动画时间
      // },
    };
  },
  mounted() {
    this.getList();
  },
  methods: {
  
  },
  watch: {
    
  },
};
</script>

<style lang="less" scoped>
.scrollAnimation {
  width: 200px;
  background-color: red;
  overflow-y: auto;
  position: relative;
  ul {
    position: relative;
    left: 0;
    top: 0;
    height: 100px;
    overflow-y: auto;
    li {
      font-size: 18px;
      // color: #cccc;
      background-color: #cccc;
      margin-bottom: 5px;
      line-height: 20px;
      height: 20px;
    }
    .bg {
      color: red;
    }
  }
}
</style>




指令代码

import Vue from "vue";
Vue.directive('scroll-height', {
    // el:指令所绑定的元素,可以用来直接操作 DOM。
    //binding:一个对象,包含以下 property:
    bind(el, binding, vnode) {
        let time = null;
        let scrollTime = null;
        let speed = 1000;
        let current = 0;

        let self = vnode.context;
        let $el = $(el);


        let myHeigth = $el.attr("height") ? $el.attr("height") : '';
        let tag = $el.attr("Tag") ? $el.attr("Tag") : 'li';
        let isEnd = $el.attr("isEnd")==true ? true : false;
        let speed1 = $el.attr("speed1") ? $el.attr("speed1") : 1000;
        let speed2= $el.attr("speed2") ? String($el.attr("speed2")) : 500;

        self.$nextTick(() => {
            // 1.首先,几行可以滑动
            let maxHeight = 0;
            let chrLength = $el.find(tag).length;
            for (let i = 0; i < myHeigth; i++) {
                maxHeight += $el.find(tag).eq(i).outerHeight(true)
            }
            $el.css({
                height: maxHeight
            });
            $el.css({
                overflowY: 'auto'
            });

            // 定时滚动
            function autoPlay() {
                clearInterval(time)
                time = setInterval(animation, speed1)
            }
			// 移动
            function animation() {
                let end = isEnd ? myHeigth : 0
                if (current < self.items.length-1 ) {
                    current++
                } else {
                    current = 0
                }
                self.current = current

                let offsetTop = $el.find(tag).eq(current).outerHeight(true)
                $el.stop(false, true).animate({
                    scrollTop: `${current *offsetTop}px`,
                }, speed2)
            }
			//鼠标进入
            function bindMouseEnter() {
                clearInterval(time)
                clearInterval(scrollTime)
            }
			// 鼠标离开
            function bindMouseLeave() {
                scrollTime = setTimeout(() => {
                    autoPlay();
                    animation();
                }, 1000);
            }

            autoPlay();
            el.addEventListener(
                "mouseenter",
                bindMouseEnter
            );
            el.addEventListener(
                "mouseleave",
                bindMouseLeave
            );
        })

    },
    inserted: function (el) { // inserted 表示被绑定元素插入父节点时调用
        el.focus();
    },
    update(el, binding) {

    }
})


在全局全局即可(main.js)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
程序分享如何实现实时滚动条效果类Mathematica的manipulate-manipulate.m 大家知道,在MATLAB中的滚动条控件是“非实时”的。所谓非实时,指的是用户在拖动滚动条时,滚动条的callback函数不会被触发,只有放开滚动条后,callback函数才会被调用一次。 但是,有的时候我们可能会有这样的需要:比如我们在窗口中做出了一个y = f函数的图形,这个函数有几个参数a, b, c ... 然后我们希望通过用滚动条的形式来改变这些参数的数值,并实时地在窗口中观察参数改变后的图形的结果。但直接使用滚动条控件的话,拖动滚动条时图形不会更新。想看到参数连续变化时对图形的影响,就只能一下一下地点击滚动条两端的箭头,非常繁琐。 这个功能在Mathematica下用manipulate命令就非常容易实现。但是在MATLAB下却一直没有提供具有类似功能的函数。所以我自己写了一个MATLAB的manipulate版本。当然,现在这个版本只能实现最基本的2D plot对象。至于其他类型的图形对象,我会在以后慢慢添加。 后 (或者在 http://www.mathworks.com/matlabcentral/fileexchange/36512-manipulate-interactive-parametrized-plotting 下载,帮我增加点人气) 在命令行中输入 manipulate复制代码 即可看到如下图所示的界面,用户可以随意拖动滚动条,axes中的内容会实时更新。 manipulate_demo.gif 实时滚动条效果演示 用户也可以使用自己给定的函数,并且可以操纵任意数目的参数,比如下列语句: manipulate*x param),[-10:10],[2 0]},{[-10 10],[-10 10]}, {1,'Slope',1 10}, {2,'Shift',-5 5})复制代码 会产生一条直线,用户可以操纵其斜率和截距。 更多使用方法请看函数自带的帮助(英文)。 欢迎提出宝贵意见。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值