1
- # PageSide -- 移动端切屏组件
1
+ # PageSide -- 移动端滑屏组件
2
2
3
- ` PageSlide ` 是一个用于移动端屏切的工具,支持竖切,横切,预加载等功能 ,同时支持 AMD 模块化加载方式
3
+ ` PageSlide ` 是一个用于移动端滑屏组件,支持上下滑动,左右滑动,禁止滑动等功能 ,同时支持 AMD 模块化加载方式
4
4
5
5
## 使用方法
6
6
7
7
** HTML:**
8
8
``` html
9
- <div class =" wrap" >
10
- <section class =" screen screen1" >screen1</section >
11
- <section class =" screen screen2" >screen2</section >
12
- <section class =" screen screen3" >screen3</section >
13
- <section class =" screen screen4" >screen4</section >
14
- <section class =" screen screen5" >screen5</section >
9
+ <div class =" page-wrap" >
10
+ <div class =" page" >
11
+ <div class =" title" >page one</div >
12
+ <div class =" subtitle" >page one subtitle</div >
13
+ <div class =" arrow" ></div >
14
+ </div >
15
+
16
+ <div class =" page" >
17
+ <div class =" title" >page two</div >
18
+ <div class =" subtitle" >page two subtitle</div >
19
+ <div class =" arrow" ></div >
20
+ </div >
21
+ <div class =" page" >
22
+ <div class =" title" >page three</div >
23
+ <div class =" subtitle" >page three subtitle</div >
24
+ <div class =" arrow" ></div >
25
+ </div >
26
+ <div class =" page" >
27
+ <div class =" title" >page four</div >
28
+ <div class =" subtitle" >page four subtitle</div >
29
+ </div >
15
30
</div >
16
31
```
17
32
18
33
** CSS**
19
34
``` css
20
- html , body , .wrap {
35
+ html , body , .page- wrap {
21
36
width : 100% ;
22
37
height : 100% ;
23
38
overflow : hidden ;
24
39
}
25
- .screen {
40
+
41
+ .page {
26
42
width : 100% ;
27
43
height : 100% ;
28
- overflow : hidden ;
29
44
-webkit-backface-visibility : hidden ;
30
45
-webkit-perspective : 1000 ;
31
46
}
@@ -35,53 +50,112 @@ html, body, .wrap{
35
50
** JavaScript**
36
51
``` javascript
37
52
new PageSlide ({
38
- pages: document . querySelectorAll (' .screen ' )
53
+ pages: $ (' .page-wrap .page ' )
39
54
});
40
55
```
41
56
42
57
## 参数
43
58
44
59
``` javascript
45
60
new PageSlide ({
46
- pages: document .querySelectorAll (' .screen' ), // 必需,需要切换的所有屏
47
- swipe: ' Y' , // 可选,控制切换方向['X', 'Y'],默认值为 'Y'
48
- toggleClass: ' current' , // 可选, 当前屏的class (方便实现内容的进场动画),默认值为 'current'
49
- animateFn: ' ease-in-out' , // 可选,屏切动画,可选值为 ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out'],默认值为 'ease-in-out'
50
- speed: 500 , // 可选,屏切速度,建议值范围为[100-1000],默认值为 500
51
- control: false , // 可选,动态生成屏标识,默认为 false
52
- controlClass: ' page-control' , // 可选,依赖于 control 属性,方便用户设置标识样式,默认值为 'page-control'
53
- preLoad: false // 可选,图片预加载,切换到当前屏时,预先加载下一屏的图片,默认为 false
61
+ pages: $ (' .page-wrap .page' ), // 必需,需要切换的所有屏
62
+ direction: ' v' , // 可选,vertical 或 v 为上下滑动,horizontal 或 h 为左右滑动,默认为 v
63
+ currentClass: ' current' , // 可选, 当前屏的class (方便实现内容的进场动画),默认值为 'current'
64
+ gestureFollowing: ' false' , // 可选,如果为 true,则开启手势跟随模式
65
+ hasDot: ' false' , // 可选,生成标识点结构,样式自己控制
66
+ preventDefault: true , // 可选,是否阻止默认行为
67
+ rememberLastVisited: true , // 可选,记住上一次访问结束后的索引值,可用于实现页面返回后是否回到上次访问的页面
68
+ dev: false , // 可选,开发模式,传入具体页面索引值
69
+ oninit : function () {}, // 可选,初始化完成时的回调
70
+ onchange : function () {} // 可选,每一屏切换完成时的回调
54
71
});
55
72
```
56
73
57
74
## 接口
58
75
59
76
- ` prev() ` 上一屏
60
77
- ` next() ` 下一屏
61
- - ` run(n) ` 跳转到第 n 屏
78
+ - ` moveTo(n) ` 跳转到第 n 屏,有缓动效果
79
+ - ` moveTo(n, true) ` 直接跳到第 n 屏,没有缓动效果
62
80
63
- ## 示例
81
+ ## 功能点
64
82
65
- ![ Alt text] ( https://raw.githubusercontent.com/littledu/littledu.github.io/master/demo/pageSlide/cli.jpg )
83
+ ### 1. 支持 dom 绑定动画
84
+
85
+ 通常,页面上的元素动画都是通过样式来控制,如下:
86
+ ``` css
87
+ .current .dom {
88
+ -webkit-animation : slideToTop 1s 0.5s ease both ;
89
+ }
90
+ ```
66
91
67
- 或 点击 http://littledu_test.jd-app.com/pageSlide/
92
+ pageSlide 支持将动画直接绑定在具体 dom 元素上,如下:
93
+ ``` html
94
+ <div class =" title" data-animation =' {"name": "slideToTop", "duration": 800, "timing-function": "ease", "fill-mode": "both"}' >
95
+ page two
96
+ </div >
97
+ <div class =" subtitle" data-animation =' {"name": "slideToTop", "duration": 800, "delay": 300, "timing-function": "ease", "fill-mode": "both"}' >
98
+ page two subtitle
99
+ </div >
100
+ ```
68
101
102
+ ### 2. 手势跟随
69
103
70
- ### 预加载功能介绍
104
+ pageSlide 最初的滑动较简单,直接判断手势进行翻屏,而有朋友喜欢在 touchmove 时能拉动页面,看到下一屏,此为朋友说的 ` 手势跟随 ` 。其也 因为没有此功能而放弃使用 pageSlide,故新版做了支持,只需要如右设置即可: ` gestureFollowing: true ` 。
71
105
72
- 经常的,在微信朋友圈打开某些屏切页面,总需要等很久,因为其可能做了很酷弦的效果,用了不少图片,为了让效果体验更流畅,所以有些会加一个 loading 效果,等页面完全加载完了再显示出来。但也是依然要等。所以,PageSlide 想在需要的时候再加载这些图片,一来可以提高页面加载速度,二来用户没看完也没必要加载后面的图片。故有此功能。
106
+ ### 3. 锁定禁止滑动
73
107
74
- ** 使用方法: **
108
+ 随着业务的发展,有时候需要锁定当前屏,不响应用户的滑动事件,需要点击某按钮或完成某些操作后再自动滑屏。本次更新提供了以下方法进行锁定:
75
109
76
- 1 . 用 ` textarea ` 将内容装起来,如:
77
110
``` html
78
- <div class =" wrap" >
79
- <section class =" screen srceen1" >screen1</section >
80
- <section class =" screen srceen2" ><textarea style =" display :none ;" >srceen2</textarea ></section >
81
- <section class =" screen srceen3" ><textarea style =" display :none ;" >>srceen3</textarea ></section >
82
- </div >
111
+ <div class =" page" data-lock-next =" true" data-lock-prev =" true" ></div >
112
+ ```
113
+
114
+ ` data-lock-next ` : 禁止往后滑
115
+ ` data-lock-prev ` : 禁止往前滑
116
+
117
+ ### 4. 记住页面索引
118
+
119
+ 有时候,当页面跳走返回时,希望能直接返回到上次跳走的页面,而不希望重头再来,只需如右设置:` rememberLastVisited: true ` ,即会保存当前页面索引到 localstorage,当返回时即可方便操作,如下:
120
+
121
+ ``` javascript
122
+ new PageSlide ({
123
+ pages: $ (' .page-wrap .page' ),
124
+ rememberLastVisited: true ,
125
+ oninit : function (){
126
+ // 返回时,需告诉我们此时为返回动作而不是刷新,可以通过 hash 告诉我们
127
+ // PageSlide 所有回调接口 this 指向 PageSlide,方便进行操作
128
+ if (返回为 true ){
129
+ this .moveTo (this .lastVisitedIndex , true );
130
+ }
131
+ }
132
+ });
133
+ ```
134
+
135
+ ### 5. dev 模式
136
+ 此为个人习惯,我在开发时,假设在写第二屏动画时,我会将第一屏隐藏掉,以方便每次刷新都直接在第二屏,而不需要去滑动。但当我在写第 5 屏动画时,我需要手动隐藏 n-1 屏。。。。然后此时领导过来说,XXX,来,让我看一下你做好的效果,然后我又要手动把之前隐藏的显示,十几秒后看完我继续开发又要继续隐藏。。。。。人生如此短暂,受不鸟呐。所以,只需要如下操作,即可愉快的开发:
137
+
138
+
139
+ ``` javascript
140
+ new PageSlide ({
141
+ pages: $ (' .page-wrap .page' ),
142
+ dev: 0 // 0|1|2|3|...
143
+ });
83
144
```
84
- 2 . ` preLoad ` 参数设为 ` true ` 即可。
145
+
146
+ ## TODO
147
+ 看后面需求是否有必要实现如下功能:
148
+
149
+ 1 . scale 的动画切换方式
150
+ 2 . cover 的动画切换方式
151
+ 3 . 支持内容超出一屏先滚完再翻页
152
+
153
+ ## Releases
154
+
155
+ #### 0.2.0 基于 zepto 重写,去除 预加载 等功能。
156
+ #### 0.1.0 实现基本功能。
157
+
158
+
85
159
86
160
87
161
0 commit comments