vue时间段选择器效果

代码语言:html

所属分类:选择器

代码描述:vue时间段选择器效果,可以选择不同的时间段

代码标签: 效果

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>time range select</title>
    <link type="text/css" rel="stylesheet" href="http://repo.bfw.wiki/bfwrepo/css/tailwind.min.css">


    <style>

        .transition {
            transition-duration: .4s;
        }
        .cursor-grab {
            cursor: grab;
        }
        .cursor-grabbed {
            cursor: grabbing;
        }
    </style>


</head>

<body>

    <div class="min-w-screen bg-gray-800 min-h-screen flex justify-center items-center">
        <div class="max-w-sm bg-gray-200 p-4 pb-6 shadow-2 flex-1 my-6 rounded">
            <h1 class="text-2xl text-gray-800 my-6 text-center">Select range</h1>

            <div id="app">
                <div class="w-full flex">
                    <timeslider name="time-from" class="flex-1 bg-gray-300 relative overflow-hidden shadow-inner" v-model='from' :max-value="to"></timeslider>
                    <timeslider name="time-to" class="ml-2 flex-1 bg-gray-300 relative overflow-hidden shadow-inner" v-model='to' :min-value="from"></timeslider>
                </div>
            </div>
        </div>
    </div>
    <script type="text/javascript" src="http://repo.bfw.wiki/bfwrepo/js/vue@2.6.1.js"></script>
    <script type="text/javascript" src="http://repo.bfw.wiki/bfwrepo/js/hammer.min.js"></script>

    <script>
        Vue.component('timeslider', {
            props: {
                name: String,
                value: Number,
                maxValue: {
                    default: 86400,
                        type: Number
                    }, // max value that's available to set (in seconds)
                    minValue: {
                        default: 0,
                            type: Number
                        }, // minimum value that's available to set (in seconds)
                    },
                    template: `
                    <div ref="wrapper" :class="(moving ? 'cursor-grabbed' : 'cursor-pointer')">

                    <div class="absolute w-full h-full top-0 flex items-center justify-center">
                    <input type="hidden" :value="value" :name="name">
                    <div class="w-16 h-16 rounded-full bg-gray-400" :style="selectorPos"></div>
                    </div>
                    <ul ref="ribbon" :style="scroll" class="transition relative select-none list-none flex" tabindex="0" @keyup="handleKeyboard($event)" @keydown="handleKeyboard($event)" >
                    <li :ref="'step'+t.value" :class="stepState(t.value)" class="w-16 h-20 flex-shrink-0 text-center flex justify-center items-center" v-for="t in hours" @click="(t.value < minValue || t.value > maxValue) ? null : $emit('input', t.value)">
                    {{t.display}}
                    </li>
                    </ul>
                    <div class="absolute w-full h-full top-0 flex items-center justify-center pointer-events-none">
                    <div class="w-16 h-16 rounded-full pointer-events-auto" v-pan="onPan" :class="{'cursor-grab': !moving}"></div>
                    </div>
                    </div>
                    `,
                    data() {
                        return {
                            scroll: '', // how far (in pixels) should the stripe with hours be moved according to the current value
                            selectorPos: '', // how far to move touch/drag indicator
                            currentKeyFlag: '', // stores keypressEvent.key value for keypress action
                            stepValue: 1800,
                            moving: false,

                            timeModifier: 1
                        }
                    },
                    watch: {
                        value(newVal) {
                            this.calculateScroll()
                        }
                    },
                    created() {
                        this.thrott.........完整代码请登录后点击上方下载按钮下载查看

网友评论0