From be01f0b4bb9522b44a34a4bc020ac029f6f864f1 Mon Sep 17 00:00:00 2001 From: Sergio Crisostomo Date: Wed, 27 Sep 2017 14:46:42 +0200 Subject: [PATCH] New component: Scroll --- .eslintrc.json | 3 +- package-lock.json | 7 +- package.json | 1 + src/components/scroll/index.js | 3 + src/components/scroll/loading-component.vue | 39 +++ src/components/scroll/scroll.vue | 271 ++++++++++++++++++++ src/index.js | 14 +- src/styles/components/index.less | 3 +- src/styles/components/scroll.less | 67 +++++ 9 files changed, 399 insertions(+), 9 deletions(-) create mode 100644 src/components/scroll/index.js create mode 100644 src/components/scroll/loading-component.vue create mode 100644 src/components/scroll/scroll.vue create mode 100644 src/styles/components/scroll.less diff --git a/.eslintrc.json b/.eslintrc.json index 46c3cbe3..3bc3fd34 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -8,7 +8,8 @@ "sourceType": "module" }, "env": { - "browser": true + "browser": true, + "es6": true }, "extends": "eslint:recommended", "plugins": ["vue"], diff --git a/package-lock.json b/package-lock.json index 05039016..f410f167 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "iview", - "version": "2.3.2", + "version": "2.4.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -12493,6 +12493,11 @@ "lodash.escape": "3.2.0" } }, + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", diff --git a/package.json b/package.json index 8f489201..d82aba6b 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "core-js": "^2.5.0", "deepmerge": "^1.5.1", "element-resize-detector": "^1.1.12", + "lodash.throttle": "^4.1.1", "popper.js": "^0.6.4", "tinycolor2": "^1.4.1" }, diff --git a/src/components/scroll/index.js b/src/components/scroll/index.js new file mode 100644 index 00000000..dedbe686 --- /dev/null +++ b/src/components/scroll/index.js @@ -0,0 +1,3 @@ +import Scroll from './scroll.vue'; + +export default Scroll; diff --git a/src/components/scroll/loading-component.vue b/src/components/scroll/loading-component.vue new file mode 100644 index 00000000..f4a214ad --- /dev/null +++ b/src/components/scroll/loading-component.vue @@ -0,0 +1,39 @@ + + + + diff --git a/src/components/scroll/scroll.vue b/src/components/scroll/scroll.vue new file mode 100644 index 00000000..9933da32 --- /dev/null +++ b/src/components/scroll/scroll.vue @@ -0,0 +1,271 @@ + + + diff --git a/src/index.js b/src/index.js index 0b199739..036b224d 100644 --- a/src/index.js +++ b/src/index.js @@ -23,6 +23,7 @@ import Form from './components/form'; import Icon from './components/icon'; import Input from './components/input'; import InputNumber from './components/input-number'; +import Scroll from './components/scroll'; import LoadingBar from './components/loading-bar'; import Menu from './components/menu'; import Message from './components/message'; @@ -46,8 +47,8 @@ import Tooltip from './components/tooltip'; import Transfer from './components/transfer'; import Tree from './components/tree'; import Upload from './components/upload'; -import { Row, Col } from './components/grid'; -import { Select, Option, OptionGroup } from './components/select'; +import {Row, Col} from './components/grid'; +import {Select, Option, OptionGroup} from './components/select'; import locale from './locale'; const iview = { @@ -84,6 +85,7 @@ const iview = { Input, iInput: Input, InputNumber, + Scroll, LoadingBar, Menu, iMenu: Menu, @@ -111,7 +113,7 @@ const iview = { Spin, Step: Steps.Step, Steps, - // Switch, + // Switch, iSwitch: Switch, iTable: Table, Table, @@ -127,11 +129,11 @@ const iview = { Upload }; -const install = function (Vue, opts = {}) { +const install = function(Vue, opts = {}) { locale.use(opts.locale); locale.i18n(opts.i18n); - Object.keys(iview).forEach((key) => { + Object.keys(iview).forEach(key => { Vue.component(key, iview[key]); }); @@ -147,4 +149,4 @@ if (typeof window !== 'undefined' && window.Vue) { install(window.Vue); } -module.exports = Object.assign(iview, {install}); // eslint-disable-line no-undef +module.exports = Object.assign(iview, {install}); // eslint-disable-line no-undef diff --git a/src/styles/components/index.less b/src/styles/components/index.less index a5190bb0..4d1c745b 100644 --- a/src/styles/components/index.less +++ b/src/styles/components/index.less @@ -13,6 +13,7 @@ @import "checkbox"; @import "switch"; @import "input-number"; +@import "scroll"; @import "tag"; @import "loading-bar"; @import "progress"; @@ -41,4 +42,4 @@ @import "tree"; @import "avatar"; @import "color-picker"; -@import "auto-complete"; \ No newline at end of file +@import "auto-complete"; diff --git a/src/styles/components/scroll.less b/src/styles/components/scroll.less new file mode 100644 index 00000000..ff712059 --- /dev/null +++ b/src/styles/components/scroll.less @@ -0,0 +1,67 @@ +@scroll-prefix-cls: ~"@{css-prefix}scroll"; + +.@{scroll-prefix-cls} { + &-wrapper { + width: auto; + margin: 0 auto; + position: relative; + outline: none; + } + + &-container { + overflow-y: scroll; + } + + &-content { + opacity: 1; + transition: opacity 0.5s; + } + + &-content-loading { + opacity: 0.5; + } + + &-loader { + text-align: center; + padding: 0px; + transition: padding 0.5s; + } +} + +.@{scroll-prefix-cls}-loader-wrapper { + padding: 5px 0; + height: 0; + background-color: inherit; + transform: scale(0); + transition: opacity .3s, transform .5s, height .5s; + + &-active { + height: 40px; + transform: scale(1); + } + + @keyframes ani-demo-spin { + from { + transform: rotate(0deg); + } + 50% { + transform: rotate(180deg); + } + to { + transform: rotate(360deg); + } + } + + .@{scroll-prefix-cls}-spinner { + position: relative; + } + + .@{scroll-prefix-cls}-spinner-icon { + animation: ani-demo-spin 1s linear infinite; + } +} + +@media (max-width: 768px) { + .@{scroll-prefix-cls} { + } +}