手动实现移动端确认框(阿里开源的SUI Mobile框架的操作表)

翻看几个前端的移动框架,发现各有千秋,不过现在好像不用框架都不好意思说自己是做移动端的。其实不然,个人在移动端由于刚刚起步,暂时没用上框架。不过有时候我会仿照框架写几个需要的组件,比如说这个:


由于只是需要框架的几个功能,为了节省流量,优化网页加载,所以不需要把整个框架引入,简单把功能实现。
本文就介绍一下怎样实现阿里开源的SUI Mobile框架的操作表,点击查看原版
原文

1.基本思路

1.1 概述

用户点击某些操作按钮,比如,删除、添加、修改时,为了防止用户操作错误,往往需要用户再次进行确认,防止用户重要信息被误操作。移动端比较好的体验效果就是这样的操作单,从在屏幕下方滑出显示,取消时”沿路返回“。在屏幕下方是应为操作方便,毕竟是移动端,大拇指很容易操作到。

1.3 js设计原理

点击出现,点击取消再次隐藏,PC端很容易实现,移动端一样;需要说明的是这里的遮罩层和操作单(操作单就是出现的那块操作区)都是单独,单独放在html标签之间,没有嵌套关系。操作表的出现方式是淡入向上滑动,隐藏方式是淡出向下滑动,这里最好的办法就是CSS3动画实现,没毛病。

贴上代码,一一介绍

2.代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<!-- 使用rem作布局方式时,视口的设置很有必要-->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<meta content="yes" name="apple-mobile-web-app-capable" />
<meta name="apple-mobile-web-app-status-bar-style" content="blank">
<meta content="telephone=no" name="format-detection" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="keywords" content="xx,xx,xx" />
<meta name="description" content="yyyyyyy" />
<!-- <script src="./js/faskclick.js"></script>-->
<!-- 引入自己封装的rem.js文件-->
<script src="./js/rem.js"></script>
<script src="./js/jquery-1.11.1.min.js"></script>
<style>
* {
margin: 0;
padding: 0;
}
.mask {
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 9;
background: rgba(0, 0, 0, 0.6);
display: none;
}

.wrap {
width: 99%;
height: 7rem;
position: fixed;
bottom: 2px;
left: 0.5%;
right: 0;
z-index: 10;
background: #FFF;
border-radius: 5px;
display: none;
}

.wrap div {
box-sizing: border-box;
-webkit-box-sizing: border-box;
border-top: 1px solid #333;
}

.wrap .div-title {
width: 100%;
height: 3rem;
text-align: center;
line-height: 3rem;
}

.wrap .div-btn {
width: 100%;
height: 2rem;
text-align: center;
line-height: 2rem;
}

.pass {
background: green;
color: aliceblue;
}

.close {
background: red;
color: aliceblue;
}
/* 预设动画*/
.animated {
-webkit-animation-duration: .5s;
animation-duration: .5s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
}

@-webkit-keyframes fadeInUp {
from {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
}
to {
opacity: 1;
-webkit-transform: none;
transform: none;
}
}

@keyframes fadeInUp {
from {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
}
to {
opacity: 1;
-webkit-transform: none;
transform: none;
}
}
.fadeInUp {
-webkit-animation-name: fadeInUp;
animation-name: fadeInUp;
}

@-webkit-keyframes fadeOutDown {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
}
}

@keyframes fadeOutDown {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
}
}

.fadeOutDown {
-webkit-animation-name: fadeOutDown;
animation-name: fadeOutDown;
}
</style>
</head>

<body>
<button class="haha">点击</button>
<div class="mask" id="mask"></div>
<div class="wrap animated">
<div class="div-title">您确定要删除我么?</div>
<div class="div-btn pass">确认</div>
<div class="div-btn close">取消</div>
</div>
<script>
//点击按钮,遮罩层先出现,淡出淡入在视觉上好一些,操作表向上滑动出现
$('.haha').bind('click', function() {
$('#mask').fadeIn();
//操作表向上滑动出现,先显示操作表(display:block),移除预设动画类'fadeOutDown',再添加预设动画类’fadeInUp‘
$('.wrap').show().removeClass('fadeOutDown').addClass('fadeInUp');
});
//点击取消按钮,操作表向下滑动隐藏,‘delay(500)’可以防止操作表在视觉上还没向下滑动就隐藏掉的问题,
$('.close').bind('click', function() {
//操作表向下滑动隐藏,先移除预设动画类'fadeInUp',再添加预设动画类’fadeOutDown‘,最后隐藏操作表(display:none),
$('.wrap').removeClass('fadeInUp').addClass('fadeOutDown').delay(500).hide(0);
//然后遮罩层晚操作表隐藏
$('#mask').fadeOut();
})
//(’display:block‘和’display:none‘只做说明)
</script>

</body>
</html>

3、补充说明

对于动画的实现,自己做也是没问图,博主比较懒,拿现成的省时省力。大家应该都知道animate.css.你可以选择全部拿下来整个引用。怕冗余代码多的话,我教你拿出你需要的代码。
1.确定你需要的效果,博主需要淡入向上滑动,和淡出向下滑动,如下

2.然后下载下来整个animate.css类库文件,打开找到相应的类名fadeInUp、fadeOutDown


3.复制粘贴出来,放在自己的css文件中,还没完,必须把’animated‘类也拿出来,放在动画代码的前面(必须)

4.需要动画的div,要预先添加’animaied‘,再添加相应的动画类,比如’fadeInUp‘
这样以后就可以随意使用动画了,像这样的:
animate.css实际项目使用

4、在线演示

在线演示