jquery 学习思考-扩展

需求, 能够选中日期然后返回字段。另外, 设计页面时遵循:

  1. 基础事件所需要的界面
  2. 自己作为用户确认是否继续添加交互
  3. 根据 2 回到 1 或结束

    date picker 来源

    来源是这个网站

界面构建阶段

首先先写好界面, 然后保证结构不变添加事件, 再依次完善事件界面
完成界面, 完完整整根据设计图来就行

为了省事大部分css与原网址一致, 注意此阶段写死了参数, 后面js动态生成时会更改

input 输入框

用最常见的样式, 这是在网上找到的, 其动态效果的触发为 :placeholder-shown, hover, focus ,属性为 transform 中的 translate, scale, transform-origin。控制为 transition
触发含义: placeholder(占位符)是否展示。
属性含义: 移动, 缩放, 动画效果起始点。
input输入框

原网址用的 stylus css预处理器, 可以通过css框的右上角的箭头 选择 view compiled css 看处理后的 css

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
<style>
#inp {
cursor: pointer;
width: 100%;
border: 0;
padding: 12px 0;
height: 48px;
font-size: 18px;
font-weight: 500;
border-bottom: 2px solid #c8ccd4;
border-radius: 0;
color: #223254;
transition: all 0.15s ease;
}
#inp:hover {
background: rgba(34, 50, 84, 0.03);
}
#inp:not(:placeholder-shown) + span {
color: #5a667f;
transform: translateY(-26px) scale(0.75);
}
#inp:focus {
background: none;
outline: none;
}
#inp:focus + span {
color: #07f;
transform: translateY(-26px) scale(0.75);
}
#inp:focus + span + .border {
transform: scaleX(1);
}
.inp {
position: relative;
top: 50px;
margin: auto;
width: 100%;
max-width: 280px;
display: block;
}
.inp * {
box-sizing: border-box;
}
.label {
position: absolute;
top: 16px;
left: 0;
font-size: 16px;
color: #9098a9;
font-weight: 500;
transform-origin: 0 0;
transition: all 0.2s ease;
}
.border {
position: absolute;
bottom: 0;
left: 0;
height: 2px;
width: 100%;
background: #0077ff;
transform: scaleX(0);
transform-origin: 0 0;
transition: all 0.15s ease;
}
</style>
<label for="inp" class="inp">
<input type="text" id="inp" placeholder="&nbsp;" />
<span class="label">Label</span>
<span class="border"></span>
</label>

头部

布局用的float, 周围的空白用的 padding, text-indent控制。

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
<style data="wrap背景阴影">
.wrap {
position: absolute;
background: #fdfdfd;
border: 1px solid #e8e8e8;
box-shadow: 1px 2px 3px #ddd;
}
</style>
<style data="hd年月份">
.hd {
padding: 10px 0;
height: 30px;
line-height: 30px;
}
.date-year {
font-size: 28px;
text-indent: 10px;
text-decoration: none;
float: left;
}
.year {
color: #ddd;
}
.m {
color: #888;
margin-left: -5px;
}
.arrow {
width: 50px;
margin-right: 10px;
float: right;
font: 500 26px sans-serif;
color: #ddd;
}
.prev {
cursor: pointer;
float: left;
}
.next {
cursor: pointer;
float: right;
}
</style>
<div class="wrap" style="width: 280px;">
<div class="content">
<div class="date">
<div class="hd">
<a href="javascript:;" class="date-year">
<span class="year">2019/</span>
<span class="m">10</span>
</a>
<div class="arrow">
<span class="prev"><</span>
<span class="next">></span>
</div>
</div>
<div class="ct"></div>
</div>
<div class="month"></div>
</div>
<div class="info"></div>
</div>

主体

注意拥有float属性的元素的父元素需要加个宽度
date picker 主体

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
<style data="ct主体">
.week {
color: #888;
}
ul,
ol,
li {
list-style: none;
padding: 0;
margin: 0;
}
html {
font: 500 14px 'roboto';
color: #333;
}
.wrap li {
position: relative;
float: left;
text-align: center;
border-radius: 50%;
width: 40px;
height: 40px;
line-height: 40px;
}
.items > li {
width: 280px;
}
.old {
color: #888;
}
.now {
color: #fff;
background: #66be8c !important;
}
.new {
color: #888;
}
</style>
<div class="wrap" style="">
<div class="content">
<div class="date">
<div class="hd">
<a href="javascript:;" class="date-year">
<span class="year">2019/</span>
<span class="m">10</span>
</a>
<div class="arrow">
<span class="prev"><</span>
<span class="next">></span>
</div>
</div>
<div class="ct">
<ol class="week">
<li>Sun</li>
<li>Mon</li>
<li>Tue</li>
<li>Wed</li>
<li>Thu</li>
<li>Fri</li>
<li>Sat</li>
</ol>
<ul class="items">
<li>
<ol class="days">
<li class="old">29</li>
<li class="old">30</li>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
<li>11</li>
<li>12</li>
<li>13</li>
<li class=" now">14</li>
<li>15</li>
<li>16</li>
<li>17</li>
<li>18</li>
<li>19</li>
<li>20</li>
<li>21</li>
<li>22</li>
<li>23</li>
<li>24</li>
<li>25</li>
<li>26</li>
<li>27</li>
<li>28</li>
<li>29</li>
<li>30</li>
<li>31</li>
<li class="new">1</li>
<li class="new">2</li>
<li class="new">3</li>
<li class="new">4</li>
<li class="new">5</li>
<li class="new">6</li>
<li class="new">7</li>
<li class="new">8</li>
<li class="new">9</li>
</ol>
</li>
</ul>
</div>
</div>
<div class="month"></div>
</div>
<div class="info"></div>
</div>

交互事件阶段

####

插件改写阶段

css 命名空间

没有采用前缀限制, 好奇css module里的类名, 所以玩玩, 探索一下。一激灵, 写成了用webpack打包的样子, 虽然还是能将生成的main.js引入html来达到想要的效果, 但是这已经和jquery 没关系了, 所以还是回到正道上吧

文章作者:
文章链接: https://luckyray-fan.github.io/2019/10/08/jquery-study-plugin/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 luckyray