├── .babelrc
├── .gitignore
├── demo
├── assets
│ ├── arrow-back.png
│ └── arrow-right.png
├── App.vue
├── views
│ ├── MasterDetail
│ │ ├── Detail.vue
│ │ └── Master.vue
│ ├── NoContent.vue
│ ├── Snapping.vue
│ ├── NavBar.vue
│ ├── LoadMoreAndNoData.vue
│ ├── SmoothingScroll.vue
│ ├── LoadMoreAndNoData2.vue
│ ├── RefreshAndInfinite.vue
│ ├── Custom.vue
│ ├── MultiScrollers.vue
│ ├── CustomSpinner.vue
│ └── Index.vue
└── main.js
├── .npmrc
├── index.html
├── src
├── index.js
├── module
│ ├── render.js
│ └── core.js
└── components
│ ├── Arrow.vue
│ ├── Spinner.vue
│ └── Scroller.vue
├── docs
└── index.html
├── package.json
├── README.md
├── webpack.config.js
└── dist
├── example
└── index.html
└── vue-scroller.min.js
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["es2015"]
3 | }
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | bower_components/
4 | npm-debug.log
5 |
6 | .idea/
7 | .vscode/
8 |
--------------------------------------------------------------------------------
/demo/assets/arrow-back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangdahoo/vue-scroller/HEAD/demo/assets/arrow-back.png
--------------------------------------------------------------------------------
/demo/assets/arrow-right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangdahoo/vue-scroller/HEAD/demo/assets/arrow-right.png
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | phantomjs_cdnurl=http://cnpmjs.org/downloads
2 | sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
3 | registry=https://registry.npm.taobao.org
--------------------------------------------------------------------------------
/demo/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | vue-scroller
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import Scroller from './components/Scroller.vue'
2 |
3 | function install (Vue) {
4 | if (install.installed) return
5 | install.installed = true
6 | Vue.component('scroller', Scroller)
7 | }
8 |
9 | const VueScroller = {
10 | install: install,
11 | Scroller
12 | }
13 |
14 | if (typeof window !== undefined && window.Vue) {
15 | window.Vue.use(VueScroller)
16 | }
17 |
18 | export default VueScroller
19 |
--------------------------------------------------------------------------------
/demo/views/MasterDetail/Detail.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Item {{$route.params.id}}
7 |
8 |
9 |
10 |
11 |
20 |
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | vue-scroller
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/demo/views/NoContent.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
--------------------------------------------------------------------------------
/demo/views/Snapping.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
13 | {{ item }}
14 |
15 |
16 |
17 |
18 |
21 |
45 |
--------------------------------------------------------------------------------
/demo/views/NavBar.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |

5 |
6 |
7 |
8 | {{title}}
9 |
10 |
11 |
12 |
45 |
46 |
66 |
--------------------------------------------------------------------------------
/demo/views/MasterDetail/Master.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
7 |
12 | {{ item }}
13 |
14 |
15 |
16 |
17 |
18 |
58 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-scroller",
3 | "version": "2.2.4",
4 | "description": "Vue component for smooth scrolling, pull to refresh & infinite loading.",
5 | "main": "dist/vue-scroller.min.js",
6 | "author": "wangdahoo <157195705@qq.com>",
7 | "homepage": "https://github.com/wangdahoo/vue-scroller",
8 | "repository": {
9 | "type": "git",
10 | "url": "https://github.com/wangdahoo/vue-scroller.git"
11 | },
12 | "scripts": {
13 | "dev": "webpack-dev-server --inline --hot --host=0.0.0.0 --port=8080",
14 | "doc": "cross-env NODE_ENV=production BUILD=doc webpack --progress --hide-modules",
15 | "build": "cross-env NODE_ENV=production BUILD=publish webpack --progress --hide-modules"
16 | },
17 | "keywords": [
18 | "vue",
19 | "scroll",
20 | "pulltorefresh",
21 | "pull to refresh",
22 | "pull-to-refresh",
23 | "infinite load"
24 | ],
25 | "dependencies": {
26 | "vue": "^2.2.6"
27 | },
28 | "devDependencies": {
29 | "vue-router": "^2.4.0",
30 | "babel-core": "^6.0.0",
31 | "babel-loader": "^6.0.0",
32 | "babel-preset-es2015": "^6.0.0",
33 | "cross-env": "^3.0.0",
34 | "css-loader": "^0.25.0",
35 | "file-loader": "^0.9.0",
36 | "moment": "^2.17.1",
37 | "url-loader": "^0.5.7",
38 | "vue-loader": "^11.3.4",
39 | "vue-template-compiler": "^2.2.6",
40 | "webpack": "^2.4.1",
41 | "webpack-dev-server": "^2.4.2"
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/demo/views/LoadMoreAndNoData.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
8 | {{ item }}
9 |
10 |
11 |
12 |
13 |
58 |
--------------------------------------------------------------------------------
/demo/views/SmoothingScroll.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 | {{ item }}
9 |
10 |
11 |
12 |
{{ x + ',' + y }}
13 |
14 |
15 |
30 |
65 |
--------------------------------------------------------------------------------
/demo/views/LoadMoreAndNoData2.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
8 | {{ item }}
9 |
10 |
11 |
12 |
13 |
61 |
--------------------------------------------------------------------------------
/src/module/render.js:
--------------------------------------------------------------------------------
1 | function getContentRender(content) {
2 | var global = window;
3 |
4 | var docStyle = document.documentElement.style;
5 |
6 | var engine;
7 | if (global.opera && Object.prototype.toString.call(opera) === '[object Opera]') {
8 | engine = 'presto';
9 | } else if ('MozAppearance' in docStyle) {
10 | engine = 'gecko';
11 | } else if ('WebkitAppearance' in docStyle) {
12 | engine = 'webkit';
13 | } else if (typeof navigator.cpuClass === 'string') {
14 | engine = 'trident';
15 | }
16 |
17 | var vendorPrefix = {
18 | trident: 'ms',
19 | gecko: 'Moz',
20 | webkit: 'Webkit',
21 | presto: 'O'
22 | }[engine];
23 |
24 | var helperElem = document.createElement("div");
25 | var undef;
26 |
27 | var perspectiveProperty = vendorPrefix + "Perspective";
28 | var transformProperty = vendorPrefix + "Transform";
29 |
30 | if (helperElem.style[perspectiveProperty] !== undef) {
31 |
32 | return function(left, top, zoom) {
33 | content.style[transformProperty] = 'translate3d(' + (-left) + 'px,' + (-top) + 'px,0) scale(' + zoom + ')';
34 | };
35 |
36 | } else if (helperElem.style[transformProperty] !== undef) {
37 |
38 | return function(left, top, zoom) {
39 | content.style[transformProperty] = 'translate(' + (-left) + 'px,' + (-top) + 'px) scale(' + zoom + ')';
40 | };
41 |
42 | } else {
43 |
44 | return function(left, top, zoom) {
45 | content.style.marginLeft = left ? (-left/zoom) + 'px' : '';
46 | content.style.marginTop = top ? (-top/zoom) + 'px' : '';
47 | content.style.zoom = zoom || '';
48 | };
49 |
50 | }
51 | }
52 |
53 | module.exports = getContentRender;
54 |
--------------------------------------------------------------------------------
/demo/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import VueRouter from 'vue-router'
3 | Vue.use(VueRouter)
4 |
5 | import VueScroller from 'vue-scroller'
6 | Vue.use(VueScroller)
7 |
8 | // Vue.config.silent = true
9 |
10 | import App from './App.vue'
11 |
12 | import Index from './views/Index.vue'
13 | import RefreshAndInfinite from './views/RefreshAndInfinite.vue'
14 | import SmoothingScroll from './views/SmoothingScroll.vue'
15 | import Custom from './views/Custom.vue'
16 | import MultiScrollers from './views/MultiScrollers.vue'
17 | import LoadMoreAndNoData from './views/LoadMoreAndNoData.vue'
18 | import Snapping from './views/Snapping.vue'
19 | import CustomSpinner from './views/CustomSpinner.vue'
20 | import NoContent from './views/NoContent.vue'
21 | import LoadMoreAndNoData2 from './views/LoadMoreAndNoData2.vue'
22 | import Master from './views/MasterDetail/Master.vue'
23 | import Detail from './views/MasterDetail/Detail.vue'
24 |
25 | const routes = [
26 | { path: '/', component: Index },
27 | { path: '/refreshAndInfinite', component: RefreshAndInfinite },
28 | { path: '/smoothingScroll', component: SmoothingScroll },
29 | { path: '/custom', component: Custom },
30 | { path: '/customSpinner', component: CustomSpinner },
31 | { path: '/multiScrollers', component: MultiScrollers },
32 | { path: '/loadMoreAndNoData', component: LoadMoreAndNoData },
33 | { path: '/snapping', component: Snapping },
34 | { path: '/noContent', component: NoContent },
35 | { path: '/loadMoreAndNoData2', component: LoadMoreAndNoData2 },
36 | { path: '/master-detail', component: Master },
37 | { path: '/master-detail/:id', component: Detail },
38 | ]
39 |
40 | const router = new VueRouter({
41 | routes
42 | })
43 |
44 | new Vue({
45 | router,
46 | el: '#app',
47 | template: '',
48 | components: {
49 | App
50 | }
51 | })
52 |
53 |
--------------------------------------------------------------------------------
/demo/views/RefreshAndInfinite.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
11 | {{ item }}
12 |
13 |
14 |
15 |
16 |
17 |
77 |
--------------------------------------------------------------------------------
/demo/views/Custom.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
7 |
10 | {{ item }}
11 |
12 |
13 |
14 |
15 |
43 |
80 |
--------------------------------------------------------------------------------
/demo/views/MultiScrollers.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
10 | {{ item }}
11 |
12 |
13 |
14 |
17 |
19 | {{ item }}
20 |
21 |
22 |
23 |
24 |
25 |
74 |
--------------------------------------------------------------------------------
/src/components/Arrow.vue:
--------------------------------------------------------------------------------
1 |
2 |
78 |
79 |
--------------------------------------------------------------------------------
/src/components/Spinner.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Vue Scroller  
2 |
3 | [Vue Scroller](https://github.com/wangdahoo/vue-scroller) is a foundational component of [Vonic](https://github.com/wangdahoo/vonic) UI.
4 | In purpose of smooth scrolling, pull to refresh and infinite loading.
5 |
6 | > For vue 1.0, please refer to branch v1.
7 |
8 | ## Demo
9 |
10 | [https://wangdahoo.github.io/vue-scroller/](https://wangdahoo.github.io/vue-scroller/)
11 |
12 | ## How to use
13 |
14 | ```bash
15 | npm i vue-scroller -S
16 | ```
17 |
18 | ```js
19 | /* ignore this if you include vue-scroller.js by
7 |
8 | Vue Scroller
9 |
52 |
53 |
54 |
55 |
58 |
61 |
62 | {{ item }}
63 |
64 |
65 |
66 |
109 |
110 |