├── config ├── dev.env.js ├── server.env.js └── index.js ├── .eslintignore ├── dev ├── static │ ├── layout.png │ └── logo.png ├── src │ ├── main.js │ └── App.vue └── index.html ├── .editorconfig ├── src ├── index.js ├── util │ ├── dom.js │ └── lang.js └── BetterSlider.vue ├── .gitignore ├── .postcssrc.js ├── .babelrc ├── .eslintrc.js ├── LICENSE ├── README.md ├── package.json └── dist ├── vue-sliding-button.js └── vue-sliding-button.js.map /config/dev.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | } 5 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | /build/ 2 | /config/ 3 | /dist/ 4 | /*.js 5 | /test/unit/coverage/ 6 | /dev/dist/ 7 | -------------------------------------------------------------------------------- /dev/static/layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SyMind/vue-sliding-button/HEAD/dev/static/layout.png -------------------------------------------------------------------------------- /dev/static/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SyMind/vue-sliding-button/HEAD/dev/static/logo.png -------------------------------------------------------------------------------- /config/server.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./dev.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import BetterSlider from './BetterSlider' 2 | 3 | const plugin = { 4 | install (Vue, options) { 5 | Vue.component(BetterSlider.name, BetterSlider) 6 | } 7 | } 8 | 9 | export default plugin 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | /dev/dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | /test/unit/coverage/ 8 | /test/e2e/reports/ 9 | selenium-debug.log 10 | 11 | # Editor directories and files 12 | .idea 13 | .vscode 14 | *.suo 15 | *.ntvs* 16 | *.njsproj 17 | *.sln 18 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | "postcss-import": {}, 6 | "postcss-url": {}, 7 | // to edit target browsers: use "browserslist" field in package.json 8 | "autoprefixer": {} 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /dev/src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | import BetterSlider from '../../src/index.js' 4 | 5 | Vue.config.productionTip = false 6 | 7 | Vue.use(BetterSlider) 8 | 9 | /* eslint-disable no-new */ 10 | new Vue({ 11 | el: '#app', 12 | components: { App }, 13 | template: '' 14 | }) 15 | -------------------------------------------------------------------------------- /src/util/dom.js: -------------------------------------------------------------------------------- 1 | export const TOUCH_EVENT = 1 2 | export const MOUSE_EVENT = 2 3 | 4 | export const eventType = { 5 | touchstart: TOUCH_EVENT, 6 | touchmove: TOUCH_EVENT, 7 | touchend: TOUCH_EVENT, 8 | 9 | mousedown: MOUSE_EVENT, 10 | mousemove: MOUSE_EVENT, 11 | mouseup: MOUSE_EVENT, 12 | mouseleave: MOUSE_EVENT 13 | } 14 | -------------------------------------------------------------------------------- /dev/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | vue-better-slider 7 | 8 | 9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-vue-jsx", "transform-runtime"], 12 | "env": { 13 | "test": { 14 | "presets": ["env", "stage-2"], 15 | "plugins": ["transform-vue-jsx", "transform-es2015-modules-commonjs", "dynamic-import-node"] 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // https://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parserOptions: { 6 | parser: 'babel-eslint' 7 | }, 8 | env: { 9 | browser: true, 10 | }, 11 | extends: [ 12 | // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention 13 | // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. 14 | 'plugin:vue/essential', 15 | // https://github.com/standard/standard/blob/master/docs/RULES-en.md 16 | 'standard' 17 | ], 18 | // required to lint *.vue files 19 | plugins: [ 20 | 'vue' 21 | ], 22 | // add your custom rules here 23 | rules: { 24 | // allow async-await 25 | 'generator-star-spacing': 'off', 26 | // allow debugger during development 27 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 SyMind 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/util/lang.js: -------------------------------------------------------------------------------- 1 | export function getNow () { 2 | return window.performance && window.performance.now ? (window.performance.now() + window.performance.timing.navigationStart) : +new Date() 3 | } 4 | 5 | export function computeMomentum (current, start, time, minScrollX, maxScrollX, wrapperSize, momentumTime, deceleration) { 6 | let distance = current - start 7 | let speed = Math.abs(distance) / time 8 | 9 | let momentum = speed / deceleration 10 | let duration = momentumTime 11 | let destination = current + momentum * (distance < 0 ? -1 : 1) 12 | 13 | if (destination < maxScrollX - wrapperSize) { 14 | destination = maxScrollX - wrapperSize 15 | } else if (destination > wrapperSize + minScrollX) { 16 | destination = wrapperSize + minScrollX 17 | } 18 | 19 | return { 20 | destination: Math.round(destination), 21 | duration 22 | } 23 | } 24 | 25 | const PERCENTAGE_REGEX = /^(\d+\.?\d*)|(\d*\.\d+)[%]$/g 26 | 27 | export function parsePercentage (input) { 28 | if (typeof input !== 'string') { 29 | return 30 | } 31 | const match = PERCENTAGE_REGEX.exec(input) 32 | const value = match && match[0] 33 | const number = parseInt(value) 34 | return isNaN(number) ? undefined : number * 0.01 35 | } 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue-better-slider 2 | 3 | > 一个 Vue 的滑动按钮组件,拥有优雅的惯性与回弹动画,有关动画方面的处理借鉴 better-scroll 的实现。 4 | 5 | [在线例子](https://symind.github.io/vue-better-slider/index.html) 6 | 7 | ![二维码](https://symind.github.io/static/image/vue-sliding-button-qr-code.png) 8 | 9 | # 起步 10 | ## 安装 11 | ``` bash 12 | npm i --save vue-sliding-button 13 | ``` 14 | 15 | ## 引入 16 | ``` js 17 | import Vue from 'vue' 18 | import SlidingButton from 'vue-sliding-button' 19 | 20 | Vue.use(SlidingButton) 21 | ``` 22 | ## 使用 23 | ``` html 24 | 36 | 39 | ``` 40 | 41 | # 原理 42 | ## 布局 43 | ![布局](https://symind.github.io/static/image/vue-sliding-button-layout.png) 44 | 45 | 绿色部分为 wrapper,它拥有两个子元素为 back 和 front,它的高度会被 front 撑起。黄色部分为 back,它使用**绝对定位**,它的高度与 wrapper 相同,值得注意的是为了提高性能,back 在用户触摸该控件是才被插入。front 与 back 同级。 46 | ## 关闭 47 | 组件提供关闭动画,调用组件的 close 方法使用,可以通过监听 clickBackEvent 等事件,通过传入的组件引用已调用该方法。需要注意的是,该方法并不会删除该组件,可以通过监听 closeTransitionEndEvent 事件,在其中进行自己的处理。 48 | # 选项 49 | SlidingButton 支持很多属性。 50 | ## right 51 | * 类型:Number 52 | * 默认值:80 53 | * 作用:从左向右滑动时,右边展示宽度 54 | ## left 55 | * 类型:Number 56 | * 默认值:80 57 | * 作用:从右向左滑动时,左边展示宽度 58 | ## rightBackgroundColor 59 | * 类型:Number 60 | * 默认值:80 61 | * 作用:从左向右滑动时,组件底色,主要用于关闭动画 62 | ## leftBackgroundColor 63 | * 类型:Number 64 | * 默认值:0 65 | * 作用:从右向左滑动时,组件底色,主要用于关闭动画 66 | ## momentum 67 | * 类型:Boolean 68 | * 默认值:true 69 | * 作用:表示是否开启惯性动画 70 | ## momentumTime 71 | * 类型:Number 72 | * 默认值:100 73 | * 作用:表示惯性动画持续时间 74 | ## deceleration 75 | * 类型:Number 76 | * 默认值:0.01 77 | * 作用:表示惯性动画的减速度 78 | ## closeTime 79 | * 类型:Number 80 | * 默认值:300 81 | * 作用:表示关闭动画的持续时间 82 | ## trigger 83 | * 类型:Boolean 84 | * 默认值:true 85 | * 作用:该属性为 true 或 false 并无区别,只要该值发生改变,且用户没有触摸该组件时,就会将组件的 front 置于原始位置。当在列表中使用多个该组件时,可以使用该属性。 86 | # 事件 87 | 注意:event 是事件原生参数,component 是指向该组件的引用。 88 | ## clickBackEvent 89 | * 参数:{ Object }.{ event, component } 90 | * 触发时机:用户点击 back 时 91 | ## clickFrontEvent 92 | * 参数:{ Object }.{ event, component } 93 | * 触发时机:用户点击 front 时 94 | ## touchStartEvent 95 | * 参数:{ Object }.{ event, component } 96 | * 触发时机:用户开始触摸该组件时 97 | ## closeTransitionEndEvent 98 | * 参数:{ Object }.{ event, component } 99 | * 触发时机:关闭动画结束时调用 100 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-sliding-button", 3 | "version": "1.0.6", 4 | "description": "一个 Vue 的滑动按钮组件,拥有优雅的惯性与回弹动画。", 5 | "author": "SyMind ", 6 | "keywords": [ 7 | "vue", 8 | "vuejs", 9 | "vue-component" 10 | ], 11 | "main": "dist/vue-sliding-button.js", 12 | "repository": { 13 | "type": "git", 14 | "url": "git+https://github.com/SyMind/vue-sliding-button.git" 15 | }, 16 | "bugs": { 17 | "url": "https://github.com/SyMind/vue-sliding-button/issues" 18 | }, 19 | "scripts": { 20 | "start": "webpack-dev-server --inline --progress --config build/webpack.server.conf.js", 21 | "unit": "jest --config test/unit/jest.conf.js --coverage", 22 | "e2e": "node test/e2e/runner.js", 23 | "test": "npm run unit && npm run e2e", 24 | "lint": "eslint --ext .js,.vue src test/unit test/e2e/specs", 25 | "build:dev": "node build/build.js", 26 | "build:lib": "node build/build.js lib" 27 | }, 28 | "devDependencies": { 29 | "vue": "^2.5.16", 30 | "autoprefixer": "^7.1.2", 31 | "babel-core": "^6.22.1", 32 | "babel-eslint": "^8.2.1", 33 | "babel-helper-vue-jsx-merge-props": "^2.0.3", 34 | "babel-jest": "^21.0.2", 35 | "babel-loader": "^7.1.1", 36 | "babel-plugin-dynamic-import-node": "^1.2.0", 37 | "babel-plugin-syntax-jsx": "^6.18.0", 38 | "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0", 39 | "babel-plugin-transform-runtime": "^6.22.0", 40 | "babel-plugin-transform-vue-jsx": "^3.5.0", 41 | "babel-preset-env": "^1.3.2", 42 | "babel-preset-stage-2": "^6.22.0", 43 | "chalk": "^2.0.1", 44 | "copy-webpack-plugin": "^4.0.1", 45 | "css-loader": "^0.28.0", 46 | "eslint": "^4.15.0", 47 | "eslint-config-standard": "^10.2.1", 48 | "eslint-friendly-formatter": "^3.0.0", 49 | "eslint-loader": "^1.7.1", 50 | "eslint-plugin-import": "^2.7.0", 51 | "eslint-plugin-node": "^5.2.0", 52 | "eslint-plugin-promise": "^3.4.0", 53 | "eslint-plugin-standard": "^3.0.1", 54 | "eslint-plugin-vue": "^4.0.0", 55 | "express": "^4.16.2", 56 | "extract-text-webpack-plugin": "^3.0.0", 57 | "file-loader": "^1.1.4", 58 | "friendly-errors-webpack-plugin": "^1.6.1", 59 | "html-webpack-plugin": "^2.30.1", 60 | "jest": "^22.0.4", 61 | "jest-serializer-vue": "^0.3.0", 62 | "node-notifier": "^5.1.2", 63 | "node-sass": "^4.7.2", 64 | "optimize-css-assets-webpack-plugin": "^3.2.0", 65 | "ora": "^1.2.0", 66 | "portfinder": "^1.0.13", 67 | "postcss-import": "^11.0.0", 68 | "postcss-loader": "^2.0.8", 69 | "postcss-url": "^7.2.1", 70 | "rimraf": "^2.6.0", 71 | "sass-loader": "^6.0.6", 72 | "semver": "^5.3.0", 73 | "shelljs": "^0.7.6", 74 | "uglifyjs-webpack-plugin": "^1.1.1", 75 | "url-loader": "^0.5.8", 76 | "vue-jest": "^1.0.2", 77 | "vue-loader": "^13.3.0", 78 | "vue-style-loader": "^3.0.1", 79 | "vue-template-compiler": "^2.5.2", 80 | "webpack": "^3.6.0", 81 | "webpack-bundle-analyzer": "^2.9.0", 82 | "webpack-dev-server": "^2.9.1", 83 | "webpack-merge": "^4.1.0" 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // Template version: 1.3.1 3 | // see http://vuejs-templates.github.io/webpack for documentation. 4 | 5 | const path = require('path') 6 | 7 | module.exports = { 8 | server: { 9 | 10 | // Paths 11 | assetsSubDirectory: 'static', 12 | assetsPublicPath: '/', 13 | proxyTable: {}, 14 | 15 | // Various Dev Server settings 16 | host: '0.0.0.0', // can be overwritten by process.env.HOST 17 | port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined 18 | autoOpenBrowser: false, 19 | errorOverlay: true, 20 | notifyOnErrors: true, 21 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- 22 | 23 | // Use Eslint Loader? 24 | // If true, your code will be linted during bundling and 25 | // linting errors and warnings will be shown in the console. 26 | useEslint: true, 27 | // If true, eslint errors and warnings will also be shown in the error overlay 28 | // in the browser. 29 | showEslintErrorsInOverlay: false, 30 | 31 | /** 32 | * Source Maps 33 | */ 34 | 35 | // https://webpack.js.org/configuration/devtool/#development 36 | devtool: 'cheap-module-eval-source-map', 37 | 38 | // If you have problems debugging vue-files in devtools, 39 | // set this to false - it *may* help 40 | // https://vue-loader.vuejs.org/en/options.html#cachebusting 41 | cacheBusting: true, 42 | 43 | cssSourceMap: true 44 | }, 45 | 46 | dev: { 47 | // Template for index.html 48 | index: path.resolve(__dirname, '../dev/dist/index.html'), 49 | 50 | // Paths 51 | assetsRoot: path.resolve(__dirname, '../dev/dist'), 52 | assetsSubDirectory: 'static', 53 | assetsPublicPath: '/vue-better-slider', 54 | 55 | /** 56 | * Source Maps 57 | */ 58 | 59 | productionSourceMap: true, 60 | // https://webpack.js.org/configuration/devtool/#production 61 | devtool: '#source-map', 62 | 63 | // Gzip off by default as many popular static hosts such as 64 | // Surge or Netlify already gzip all static assets for you. 65 | // Before setting to `true`, make sure to: 66 | // npm install --save-dev compression-webpack-plugin 67 | productionGzip: false, 68 | productionGzipExtensions: ['js', 'css'], 69 | 70 | // Run the build command with an extra argument to 71 | // View the bundle analyzer report after build finishes: 72 | // `npm run build --report` 73 | // Set to `true` or `false` to always turn it on or off 74 | bundleAnalyzerReport: process.env.npm_config_report 75 | }, 76 | 77 | lib: { 78 | // Paths 79 | assetsRoot: path.resolve(__dirname, '../dist'), 80 | assetsSubDirectory: 'static', 81 | 82 | /** 83 | * Source Maps 84 | */ 85 | 86 | productionSourceMap: true, 87 | // https://webpack.js.org/configuration/devtool/#production 88 | devtool: '#source-map', 89 | 90 | // Gzip off by default as many popular static hosts such as 91 | // Surge or Netlify already gzip all static assets for you. 92 | // Before setting to `true`, make sure to: 93 | // npm install --save-dev compression-webpack-plugin 94 | productionGzip: false, 95 | productionGzipExtensions: ['js', 'css'], 96 | 97 | // Run the build command with an extra argument to 98 | // View the bundle analyzer report after build finishes: 99 | // `npm run build --report` 100 | // Set to `true` or `false` to always turn it on or off 101 | bundleAnalyzerReport: process.env.npm_config_report 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /dev/src/App.vue: -------------------------------------------------------------------------------- 1 | 57 | 58 | 84 | 85 | 151 | -------------------------------------------------------------------------------- /src/BetterSlider.vue: -------------------------------------------------------------------------------- 1 | 44 | 45 | 75 | 76 | 355 | -------------------------------------------------------------------------------- /dist/vue-sliding-button.js: -------------------------------------------------------------------------------- 1 | !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports["vue-sliding-button"]=e():t["vue-sliding-button"]=e()}("undefined"!=typeof self?self:this,function(){return function(t){var e={};function i(n){if(e[n])return e[n].exports;var s=e[n]={i:n,l:!1,exports:{}};return t[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:n})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="/dist/",i(i.s=1)}([function(t,e,i){"use strict";var n=i(9),s=i(10);e.a={name:"better-slider",props:{right:{type:[Number,String],default:80},left:{type:[Number,String],default:0},deceleration:{type:Number,default:.01},momentum:{type:Boolean,default:!0},momentumTime:{type:Number,default:100},momentumLimitTime:{type:Number,default:300},momentumLimitDistance:{type:Number,default:15},bounce:{type:Boolean,default:!0},bounceTime:{type:Number,default:200},slideTime:{type:Number,default:200},closeTime:{type:Number,default:300},rightBackgroundColor:{type:String,default:"#e6454a"},leftBackgroundColor:{type:String,default:"#ccc"},trigger:{type:Boolean,default:!1}},data:function(){return{x:0,wrapperX:0,duration:0,easing:{}}},methods:{clickBackEventHandle:function(t){this.$emit("clickBackEvent",{event:t,component:this})},clickFrontEventHandle:function(t){this.$emit("clickFrontEvent",{event:t,component:this})},close:function(){this.$el.style.height=0;var t=this.$refs.wrapper.style;t.transitionDuration=this.closeTime+"ms",t.transform="translate("+-this.$refs.front.offsetWidth+"px, 0px) translateZ(0px)",this.wrapperX=-this.$refs.front.offsetWidth,this.isClosing=!0},start:function(t){var e=n.b[t.type];if(!(e!==n.a&&0!==t.button||this.initiated&&this.initiated!==e)){this.initiated=e,this.$emit("touchStartEvent",{event:t,component:this}),this.duration=this.slideTime,this.x=0,this.distX=0,this.startTime=Object(s.b)();var i=t.touches?t.touches[0]:t;this.startX=this.x,this.absStartX=this.x,this.touchX=i.pageX}},move:function(t){if(n.b[t.type]===this.initiated){this.duration=0;var e=t.touches?t.touches[0]:t,i=e.pageX-this.touchX;this.touchX=e.pageX,this.distX+=i;var r=Math.abs(this.distX),o=Object(s.b)();if(!(o-this.endTime>this.momentumLimitTime&&rthis.maxScrollX||0===this.right&&athis.maxScrollX)&&(a=this.bounce?this.x+i/3:athis.momentumLimitTime&&(this.startTime=o,this.startX=this.x))}}},end:function(t){if(n.b[t.type]===this.initiated){this.initiated=!1,this.endTime=Object(s.b)();var e=this.endTime-this.startTime,i=Math.abs(this.x-this.startX);if(this.momentum&&ethis.momentumLimitDistance){var r=Object(s.a)(this.x,this.startX,e,this.minScrollX,this.maxScrollX,this.$el.offsetWidth,this.momentumTime,this.deceleration);this.duration=r.duration,this.x=r.destination,this.easing=this.ease.momentum}else this.x<1/3*this.minScrollX?(this.duration=this.slideTime,this.easing=this.ease.slide,this.x=this.minScrollX):this.x>1/3*this.maxScrollX?(this.duration=this.slideTime,this.easing=this.ease.slide,this.x=this.maxScrollX):(this.duration=this.bounceTime,this.easing=this.ease.slideTime,this.x=0)}},transitionEnd:function(t){t.target.className.indexOf("better-slider")>-1&&this.isClosing&&0===this.$el.offsetHeight?this.$emit("closeTransitionEndEvent",{event:t,component:this}):(this.isRightOpened&&this.x===this.minScrollX&&this.$emit("rightOpenedEvent",{event:t,component:this}),this.isLeftOpened&&this.x===this.maxScrollX&&this.$emit("leftOpenedEvent",{event:t,component:this}),this.resetPosition(this.bounceTime,this.ease.bounce))},resetPosition:function(t,e){this.isRightOpened?this.x=this.minScrollX:this.isLeftOpened?this.x=this.maxScrollX:this.x=0,this.duration=t,this.easing=e},computeX:function(t){if("string"==typeof t){var e=Object(s.c)(t),i=parseInt(window.getComputedStyle(this.$refs.wrapper,null).width);return"number"==typeof e?Math.ceil(e*i):0}return t}},computed:{sliderStyle:function(){return{"transition-duration":this.duration+"ms"}},frontStyle:function(){return{"transition-timing-function":this.easing,"transition-duration":this.duration+"ms",transform:"translate("+this.x+"px, 0px) translateZ(0px)"}}},created:function(){this.isClosing=!1,this.ease={slide:"ease-in",momentum:"ease-out"}},mounted:function(){this.minScrollX=-this.computeX(this.right),this.maxScrollX=this.computeX(this.left),this.$el.style.height=Math.ceil(this.$slots.front[0].elm.offsetHeight)+"px"},watch:{x:function(){var t=this.$el.style;0===this.x?(t.backgroundColor="",this.isLeftOpened=!1,this.isRightOpened=!1):this.x>0?(this.isLeftOpened=!0,this.isRightOpened=!1,t.backgroundColor=this.leftBackgroundColor):(this.isLeftOpened=!1,this.isRightOpened=!0,t.backgroundColor=this.rightBackgroundColor)},trigger:function(){this.initiated||(this.duration=this.slideTime,this.x=0)}}}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(2),s={install:function(t,e){t.component(n.a.name,n.a)}};e.default=s},function(t,e,i){"use strict";var n=i(0),s=i(11);var r=function(t){i(3)},o=i(8)(n.a,s.a,!1,r,"data-v-185a413c",null);e.a=o.exports},function(t,e,i){var n=i(4);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(6)("6abb6cc8",n,!0,{})},function(t,e,i){(t.exports=i(5)(!1)).push([t.i,"\n.better-slider[data-v-185a413c] {\n position: relative;\n overflow-x: hidden;\n width: 100%;\n -webkit-transition: all 300ms ease-in-out;\n transition: all 300ms ease-in-out;\n}\n.better-slider .better-slider-wrapper[data-v-185a413c] {\n overflow: hidden;\n height: 100%;\n}\n.better-slider .better-slider-wrapper .better-slider-back[data-v-185a413c] {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n.better-slider .better-slider-front[data-v-185a413c] {\n position: absolute;\n top: 0;\n left: 0;\n display: block;\n width: 100%;\n border: 0;\n margin: 0;\n padding: 0;\n z-index: 10;\n}\n",""])},function(t,e){t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var i=function(t,e){var i=t[1]||"",n=t[3];if(!n)return i;if(e&&"function"==typeof btoa){var s=(o=n,"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */"),r=n.sources.map(function(t){return"/*# sourceURL="+n.sourceRoot+t+" */"});return[i].concat(r).concat([s]).join("\n")}var o;return[i].join("\n")}(e,t);return e[2]?"@media "+e[2]+"{"+i+"}":i}).join("")},e.i=function(t,i){"string"==typeof t&&(t=[[null,t,""]]);for(var n={},s=0;si.parts.length&&(n.parts.length=i.parts.length)}else{var o=[];for(s=0;sr+n&&(l=r+n);return{destination:Math.round(l),duration:d}},e.c=function(t){if("string"!=typeof t)return;var e=n.exec(t),i=e&&e[0],s=parseInt(i);return isNaN(s)?void 0:.01*s};var n=/^(\d+\.?\d*)|(\d*\.\d+)[%]$/g},function(t,e,i){"use strict";var n={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"better-slider",staticStyle:{"transition-property":"height","transition-timing-function":"ease-in"},style:t.sliderStyle,on:{transitionEnd:t.transitionEnd,webkitTransitionEnd:t.transitionEnd,oTransitionEnd:t.transitionEnd,MSTransitionEnd:t.transitionEnd}},[i("div",{ref:"wrapper",staticClass:"better-slider-wrapper",staticStyle:{"transition-property":"transform","transition-timing-function":"ease-in-out"}},[i("div",{ref:"front",staticClass:"better-slider-front",staticStyle:{"transition-property":"transform"},style:t.frontStyle,on:{touchstart:t.start,mousedown:t.start,touchmove:t.move,mousemove:t.move,touchend:t.end,mouseup:t.end,touchcancel:t.end,mousecancel:t.end,mouseleave:t.end,click:t.clickFrontEventHandle}},[t._t("front")],2),t._v(" "),i("div",{ref:"back",staticClass:"better-slider-back",on:{click:t.clickBackEventHandle}},[t._t("back")],2)])])},staticRenderFns:[]};e.a=n}])}); 2 | //# sourceMappingURL=vue-sliding-button.js.map -------------------------------------------------------------------------------- /dist/vue-sliding-button.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap be0f9850f8d6b9c8347e","webpack:///src/BetterSlider.vue","webpack:///./src/index.js","webpack:///./src/BetterSlider.vue","webpack:///./src/BetterSlider.vue?41fd","webpack:///./src/BetterSlider.vue?7e01","webpack:///./node_modules/css-loader/lib/css-base.js","webpack:///./node_modules/vue-style-loader/lib/addStylesClient.js","webpack:///./node_modules/vue-style-loader/lib/listToStyles.js","webpack:///./node_modules/vue-loader/lib/component-normalizer.js","webpack:///./src/util/dom.js","webpack:///./src/util/lang.js","webpack:///./src/BetterSlider.vue?27d2"],"names":["root","factory","exports","module","define","amd","self","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","__webpack_exports__","props","right","type","Number","String","default","left","deceleration","momentum","Boolean","momentumTime","momentumLimitTime","momentumLimitDistance","bounce","bounceTime","slideTime","closeTime","rightBackgroundColor","leftBackgroundColor","trigger","data","x","wrapperX","duration","easing","methods","clickBackEventHandle","event","$emit","component","clickFrontEventHandle","close","$el","style","height","wrapperStyle","$refs","wrapper","transitionDuration","transform","front","offsetWidth","isClosing","start","_eventType","__WEBPACK_IMPORTED_MODULE_0__util_dom__","button","initiated","distX","startTime","__WEBPACK_IMPORTED_MODULE_1__util_lang__","touch","touches","startX","absStartX","touchX","pageX","move","deltaX","absDistX","Math","abs","timestamp","endTime","newX","maxScrollX","minScrollX","end","momentumX","destination","ease","slide","transitionEnd","target","className","indexOf","offsetHeight","isRightOpened","isLeftOpened","resetPosition","time","computeX","input","percentage","wrapperWidth","parseInt","window","getComputedStyle","width","ceil","computed","sliderStyle","transition-duration","frontStyle","transition-timing-function","created","mounted","$slots","elm","watch","elStyle","backgroundColor","value","__WEBPACK_IMPORTED_MODULE_0__BetterSlider__","plugin","install","Vue","options","__WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_BetterSlider_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_185a413c_hasScoped_true_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_BetterSlider_vue__","__vue_styles__","ssrContext","Component","normalizeComponent","content","locals","push","useSourceMap","list","toString","map","item","cssMapping","btoa","sourceMapping","sourceMap","unescape","encodeURIComponent","JSON","stringify","sourceURLs","sources","source","sourceRoot","concat","join","cssWithMappingToString","mediaQuery","alreadyImportedModules","length","id","hasDocument","document","DEBUG","Error","listToStyles","stylesInDom","head","getElementsByTagName","singletonElement","singletonCounter","isProduction","noop","ssrIdKey","isOldIE","navigator","test","userAgent","toLowerCase","addStylesToDom","styles","domStyle","refs","j","parts","addStyle","createStyleElement","styleElement","createElement","appendChild","obj","update","remove","querySelector","parentNode","removeChild","styleIndex","applyToSingletonTag","bind","css","media","setAttribute","ssrId","styleSheet","cssText","firstChild","createTextNode","newObj","parentId","_isProduction","_options","newList","mayRemove","textStore","replaceText","index","replacement","filter","cssNode","childNodes","insertBefore","newStyles","part","rawScriptExports","compiledTemplate","functionalTemplate","injectStyles","scopeId","moduleIdentifier","esModule","scriptExports","hook","render","staticRenderFns","_compiled","functional","_scopeId","context","$vnode","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","existing","beforeCreate","_injectStyles","h","TOUCH_EVENT","eventType","touchstart","touchmove","touchend","mousedown","mousemove","mouseup","mouseleave","performance","now","timing","navigationStart","Date","current","wrapperSize","distance","speed","round","match","PERCENTAGE_REGEX","exec","number","isNaN","undefined","esExports","_vm","_h","$createElement","_c","_self","staticClass","staticStyle","transition-property","on","webkitTransitionEnd","oTransitionEnd","MSTransitionEnd","ref","touchcancel","mousecancel","click","_t","_v"],"mappings":"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","file":"vue-sliding-button.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"vue-sliding-button\"] = factory();\n\telse\n\t\troot[\"vue-sliding-button\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/dist/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap be0f9850f8d6b9c8347e","\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/BetterSlider.vue","import BetterSlider from './BetterSlider'\n\nconst plugin = {\n install (Vue, options) {\n Vue.component(BetterSlider.name, BetterSlider)\n }\n}\n\nexport default plugin\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.js","function injectStyle (ssrContext) {\n require(\"!!vue-style-loader!css-loader!../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-185a413c\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!sass-loader!../node_modules/vue-loader/lib/selector?type=styles&index=0!./BetterSlider.vue\")\n}\nvar normalizeComponent = require(\"!../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./BetterSlider.vue\"\nimport __vue_script__ from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./BetterSlider.vue\"\n/* template */\nimport __vue_template__ from \"!!../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-185a413c\\\",\\\"hasScoped\\\":true,\\\"buble\\\":{\\\"transforms\\\":{}}}!../node_modules/vue-loader/lib/selector?type=template&index=0!./BetterSlider.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-185a413c\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/BetterSlider.vue\n// module id = 2\n// module chunks = 0","// style-loader: Adds some css to the DOM by adding a