标签:js
目前看到这里,还不懂什么是单页应用,这不就是一个普通的点击滑开收缩的动画而已……作者写的那么复杂666
请转载此文的朋友务必附带原文链接,谢谢。
原文链接:http://xuyran.blog.51cto.com/11641754/1891022
spa.html:
<!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
var spa = (function(){
var initModule = function($container){
spa.shell.initModule(($container)); //执行spa.shell里面的initModule函数
};
return {initModule:initModule}; //执行initModule函数
}())spa.shell.js
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
/*
* 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;
}
h1,h2,h3,h4,h5,h6,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
.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;
}浏览器界面如下:
本文出自 “没有翅膀的菜鸟的进阶” 博客,请务必保留此出处http://xuyran.blog.51cto.com/11641754/1891022
《单页web应用 javaScript从前端到后端》3.1 开发shell小例子demo
标签:js
原文地址:http://xuyran.blog.51cto.com/11641754/1891022