在vue2.0 中制作时间轴拖动组件

目前做的都是一些数据可视化的项目,使用的是vue框架,其中用到了d3.js、three.js、echarts。

在vue框架下我们会遇到很多让人心累的时刻,谁用谁知道。

项目过程中有遇到这样的一个组件

时间轴组件

这个组件要求是可以拖动,但是在vue中使用jquery 来操作dom,我在第一遍这样去使用的时候发现页面会很卡。

<template>
    <div class="time-axis">
            <div class="axis-scoll" id="bar1">
                <ul class="axis" :style="{width: ( 1.04 * time.length) + 'rem'}">
                    <li class="item" v-for="(item,index) in time">{{item}}</li>
                </ul>
                <span class="drag-btn" id="btn1"></span>
            </div>
    </div>
</template>
<script>
import historData from '../historData'
export default {
    data () {
        return {
            time: ['06.06','06.07','06.08','06.09','06.10','06.11','06.12'],
                        historIsShow: false,
                        dragNum: 0
        }
    },
    mounted () {
            this.scale('btn1', 'bar1');
    },
    methods: {
         scale:function (btna, bara, titlea) {
            // 这个函数的作用是用来操作时间轴滑动
            let _this = this;
            let btn = document.getElementById(btna);
            let bar = document.getElementById(bara);
            function init () {
                var g = document, b = window, m = Math;
                btn.onmousedown = function (e) {
                    var x = (e || b.event).clientX;
                    var l = this.offsetLeft;
                    var max = bar.offsetWidth - this.offsetWidth;
                    console.log(this.offsetWidth)
                    g.onmousemove = function (e) {
                        var thisX = (e || b.event).clientX;
                        var to = m.min(max, m.max(-2, l + (thisX - x)));
                        btn.style.left = to + 'px';
                        ondrag(m.round(m.max(0, to / max) * 100));
                        b.getSelection ? b.getSelection().removeAllRanges() : g.selection.empty();
                    };
                    g.onmouseup = new Function('this.onmousemove=null');
                };
            };
            function ondrag (pos) {
                // 在这里设置一个值给data()里面的dragNum为后面做滑块位置判断操作提供铺垫
                _this.dragNum = pos / 10 + '';
            }
            init();
        }
    },
}
</script>

vue 开发中我们时常会遇到一些意想不到的问题,是我们技术的卑微,也是我们初来乍到。但请在技术面前用你认真的眼神祈求它对你温柔以待。

我一生的职业只有一个,那就是:学生
不知道这条路上有多少位同学陪学习一同终生走下去。

转载于:https://www.cnblogs.com/wessonlu/p/7020184.html

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值