目前看到这里,还不懂什么是单页应用,这不就是一个普通的点击滑开收缩的动画而已……作者写的那么复杂666
请转载此文的朋友务必附带原文链接,谢谢。
原文链接:http://xuyran.blog.51cto.com/11641754/1891022
spa.html:
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
|
<!DOCTYPE html>
<
html
>
<
head
>
<
meta
charset
=
"UTF-8"
>
<
title
></
title
>
<
link
rel
=
"stylesheet"
href
=
"css/spa.css"
type
=
"text/css"
/>
<
link
rel
=
"stylesheet"
href
=
"css/spa.shell.css"
type
=
"text/css"
/>
<
style
>
</
style
>
<
script
src
=
"scripts/jquery.js"
></
script
>
<
script
src
=
"scripts/jquery.uriAnchor.js"
></
script
>
<
script
src
=
"scripts/spa.js"
></
script
>
<
script
src
=
"scripts/spa.shell.js"
></
script
>
<
script
>
$(function(){
spa.initModule(jQuery('#spa'));
})
</
script
>
</
head
>
<
body
>
<
div
id
=
"spa"
>
</
div
>
</
body
>
</
html
>
|
spa.js
1
2
3
4
5
6
|
var
spa = (
function
(){
var
initModule =
function
($container){
spa.shell.initModule(($container));
//执行spa.shell里面的initModule函数
};
return
{initModule:initModule};
//执行initModule函数
}())
|
spa.shell.js
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
|
spa.shell = (
function
(){
var
configMap = {
main_html:String()
+
'<div class="spa-shell-head">'
+
'<div class="spa-shell-head-logo"></div>'
+
'<div class="spa-shell-head-acct"></div>'
+
'<div class="spa-shell-head-search"></div>'
+
'</div>'
+
'<div class="spa-shell-main spa-x-closed">'
+
'<div class="spa-shell-main-nav"></div>'
+
'<div class="spa-shell-main-content"></div>'
+
'</div>'
+
'<div class="spa-shell-foot"></div>'
+
'<div class="spa-shell-chat"></div>'
+
'<div class="spa-shell-modal"></div>'
,
chat_extend_time:1000,
chat_retract_time:300,
chat_extend_height:450,
chat_retract_height:15,
chat_extend_title:
'click to retract'
,
chat_retracted_title:
'click to extend'
},
stateMap = {
$container:
null
,
is_chat_retracted:
true
},
jqueryMap = {},
setJqueryMap,initModule;
setJqueryMap =
function
($container){
var
$container = stateMap.$container;
jqueryMap = {
//给jqueryMap对象赋值
$container:$container,
$chat:$container.find(
'.spa-shell-chat'
)
};
}
// initModule = function($container){ //公开特权方法
// stateMap.$container = $container;
// $container.html(configMap.main_html);
// setJqueryMap();
// }
toggleChat =
function
(do_extend,callback){
var
px_chat_ht = jqueryMap.$chat.height(),
is_open = px_chat_ht === configMap.chat_extend_height,
is_closed = px_chat_ht === configMap.chat_retract_height,
is_sliding = !is_open && !is_closed;
if
(is_sliding){
return
false
;
}
if
(do_extend){
jqueryMap.$chat.animate({
height:configMap.chat_extend_height,
},configMap.chat_extend_time,
function
(){
jqueryMap.$chat.attr(
'title'
,configMap.chat_extend_title);
stateMap.is_chat_retracted =
false
;
if
(callback){
callback(jqueryMap.$chat);
}
});
return
true
;
}
jqueryMap.$chat.animate({
height:configMap.chat_retract_height
},configMap.chat_retract_time,
function
(){
jqueryMap.$chat.attr(
'title'
,configMap.chat_retracted_title);
stateMap.is_chat_retracted =
true
;
if
(callback){
callback(jqueryMap.$chat);
}
});
return
true
;
}
onClickChat =
function
(){
toggleChat(stateMap.is_chat_retracted);
return
false
;
}
initModule =
function
($container){
stateMap.$container = $container;
//给stateMap.$container对象赋值
$container.html(configMap.main_html);
setJqueryMap();
// setTimeout(function(){
// toggleChat(true);
// },3000)
// setTimeout(function(){
// toggleChat(false);
// },8000)
stateMap.is_chat_retracted =
true
;
jqueryMap.$chat.attr(
'title'
,configMap.chat_retracted_title)
.click(onClickChat);
}
return
{initModule:initModule};
}())
|
spa.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
|
/*
* spa.css
* Root namespace styles
*/
/** Begin reset */
* {
margin :
0
;
padding :
0
;
-webkit-box-sizing : border-box;
-moz-box-sizing : border-box;
box-sizing : border-box;
}
h
1
,h
2
,h
3
,h
4
,h
5
,h
6
,p { margin-
bottom
:
10px
; }
ol,ul,dl { list-style-position :
inside
;}
/** End reset */
/** Begin standard selectors */
body {
font :
13px
'Trebuchet MS'
,
Verdana
,
Helvetica
,
Arial
,
sans-serif
;
color :
#444
;
background-color :
#888
;
}
a { text-decoration :
none
; }
a:link, a:visited { color : inherit; }
a:hover {
text-decoration
:
underline
; }
strong {
font-weight :
800
;
color :
#000
;
}
/** End standard selectors */
/** Begin spa namespace selectors */
#spa {
position :
absolute
;
top
:
8px
;
left
:
8px
;
bottom
:
8px
;
right
:
8px
;
min-height :
500px
;
min-width :
500px
;
overflow :
hidden
;
background-color :
#fff
;
border-radius :
0
8px
0
8px
;
}
/** End spa namespace selectors */
/** Begin utility selectors */
.spa-x-select {}
.spa-x-clearfloat {
height :
0
!important
;
float :
none
!important
;
visibility :
hidden
!important
;
clear :
both
!important
;
}
/** End utility selectors */
|
.spa.shell.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
.spa-shell-head,.spa-shell-head-logo,.spa-shell-head-acct,.spa-shell-head-search,
.spa-shell-main,.spa-shell-main-nav,.spa-shell-main-content,.spa-shell-foot,
.spa-shell-chat,.spa-shell-modal{
position: absolute;
}
.spa-shell-head {
top : 0;
left : 0;
right : 0;
height : 40px;
}
.spa-shell-head-logo {
top : 4px;
left : 4px;
height : 32px;
width : 128px;
background : orange;
}
.spa-shell-head-acct {
top : 4px;
right : 0;
width : 64px;
height : 32px;
background : green;
}
.spa-shell-head-search{
top:4px;
right:64px;
width:248px;
height: 32px;
background: blue;
}
.spa-shell-main{
top:40px;
left:0;
bottom: 40px;
right: 0;
}
.spa-shell-main-content,
.spa-shell-main-nav{
top: 0;
bottom: 0;
}
.spa-shell-main-nav{
width: 250px;
background:
#eee;
}
.spa-x-closed .spa-shell-main-nav{
width: 0;
}
.spa-shell-main-content{
left: 250px;
right: 0;
background:
#ddd;
}
.spa-x-closed .spa-shell-main-content{
left: 0;
}
.spa-shell-foot{
bottom: 0;
left: 0;
right: 0;
height: 40px;
}
.spa-shell-chat{
bottom: 0;
right: 0;
width: 300px;
height: 15px;
background: red;
z-index: 1;
}
.spa-shell-modal{
margin-top: -200px;
margin-left: -200px;
top: 50%;
left: 50%;
width: 400px;
height: 400px;
background:
#FFFFFF;
border-radius: 3px;
z-index: 2;
}
|
浏览器界面如下:
本文转自 小旭依然 51CTO博客,原文链接:http://blog.51cto.com/xuyran/1891022