发布于2013-09-15,阅读929次,收藏 1次,评论0条 - 来自不是你的星  | 收藏

创建具有固定导航功能的滑动单页面布局网站

建立简单网页时,倾向于将内容放在同一布局中,而非多个页面。这类单页面网站非常适用于在线展示一个小型项目或者作品集。如果把内容分割为几个整洁的部分,那么访问者可以使用滑动导航以便快速浏览页面。

本教程展示如何利用jQuery建立典型的滑动导航,有多种可替代的插件都可以实现同样的功能,并且很省时。但我们这次只使用了jQuery,然后用scrollTo插件优化了性能。点击下面的链接查看在线动画演示吧。

Demo与源代码下载 

入手

首先下载jQuery的本地副本,并与其他脚本文件放在一起。还需要jQuery.scrollTo插件副本,它是一个单一的.js文件。我创建了两个替换文件index.htmlstyles.css,用于存放页面架构。我们首先来分析主要的内容。

<!doctype html> 
<html lang="en-US">
<head>
   <meta charset="utf-8">
   <meta http-equiv="Content-Type" content="text/html">
   <title>Single Page Sliding Layout - Design Shack Demo</title>
   <meta name="author" content="Jake Rocheleau">
   <link rel="shortcut icon" href="http://designshack.net/favicon.ico">
   <link rel="icon" href="http://designshack.net/favicon.ico">
   <link rel="stylesheet" type="text/css" media="all" href="css/styles.css">
   <script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>
   <script type="text/javascript" src="js/jquery.scrollTo.js"></script> 
</head> 

头文件的内容应该简明扼要,不要繁琐复杂。索引文件使用HTML5文档类型,还有我们下载的样式表以及两个JS文件。显然还有其他可替代的来自定义滚动效果,但是在本教程中直接运用了插件就简单许多了。在页面HTML中我们可以看到如何设置导航。 

<div id="w">
   <div id="content">
     <nav id="stickynav">
       <ul id="nav" class="clearfix">
         <li><a href="#topbar">Homepage</a></li>
         <li><a href="#about">About</a></li>
         <li><a href="#photos">Photos</a></li>
         <li><a href="#contact">Contact</a></li>
       </ul>
     </nav> 

使用ID #w把整个页面封装,另外用div #content装饰页面的内容。在我的教程中,导航包含在页面内容里,不过你可以移动到任意合适的位置。因为导航是固定的,所以无论浏览用户处在什么位置,菜单总是随之滚动。

容器#stickynav能够保证所有内部元素一直置于页面内容顶部。我利用了CSS z-index属性和列表选项中的内部漂浮。注意HREF的值都是指向定位在页面中某一处的一个散列标志,我们通过这个值就能决定用户滑动到哪个位置。 

内部内容

在关闭导航块之后我们发现一小段代码。文本中有很多额外的间距,这样你就可以看到在一个典型网页中它会如何表现。每一块容器都利用HTML5<section>元素,附带一个类的名称.section

<section id="about" class="section">
  <h2>About Us</h2>
  ....
</section>

CSS页面设计

我想区分开一般的顶部导航栏与本文介绍的固定导航。我们可以把一个褐色附带链接的导航条固定到页面顶端,但如果这样做的话,导航栏会挡住页面布局的一小部分。取而代之,我创建了一个新的无序列表,把链接样式设定成彼此紧挨并在旁边漂浮,这样一来菜单风格将更紧凑。

#topbar {
  background: #4f4a41;
  padding: 10px 0 10px 0;
  text-align: center;
  height: 36px;
  overflow: hidden;
  -webkit-transition: height 0.5s linear;
  -moz-transition: height 0.5s linear;
  transition: height 0.5s linear;
}
#topbar a {
  color: #fff;
  font-size:1.3em;
  line-height: 1.25em;
  text-decoration: none;
  opacity: 0.5;
  font-weight: bold;
}
#topbar a:hover {
  opacity: 1;
}
 
#stickynav {
  display: block;
  height: 35px;
  width: 100%;
  z-index: 9999;
}
 
#stickynav #nav { position: fixed; z-index: 9999; }
#stickynav #nav li { display: inline; }
#stickynav #nav li a {
  display: block;
  float: left;
  margin-right: 8px;
  font-size: 1.2em;
  font-weight: bold;
  padding: 5px 7px;
  background: #cce4c4;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
}
#stickynav #nav li a:hover { 
  text-decoration: none;
  background: #d8f0d0;
}

观察容器#stickynav,你会发现导航将跨越整个页面宽度,在使用一个透明背景的情况下当然不会很明显,但是请记住,你可能会扩大导航宽度至更宽的外部页面包装。

在我的样式表中还有一个有趣的部分拥有表单输入域和页面容器。这些规则都是定位在文件底部的,连同字体更新。注意每个标题是如何集中在页面上,以便给旁边的导航项提供空间的。可以轻易向右调整这些标题的距离,给导航链接提供跟多的空间。

form .basic {
  display: block;
  font-size: 1.5em;
  color: #555;
  font-family: Arial, Tahoma, sans-serif;
  padding: 4px 6px;
  margin-bottom: 10px;
}
 
form .basictxt {
  display: block;
  width: 550px;
  height: 180px;
  font-family: Arial, Tahoma, sans-serif;
  color: #666;
  padding: 5px 8px;
  font-size: 1.6em;
  line-height: 1.4em;
}
 
/** page structure **/
#w {
  display: block;
  width: 750px;
  margin: 0 auto;
  padding-top: 30px;
}
 
#content {
  display: block;
  width: 100%;
  background: #fff;
  padding: 25px 20px;
  padding-bottom: 35px;
  -webkit-box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 2px 0px;
  -moz-box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 2px 0px;
  box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 2px 0px;
}

我没有设置可以在某处提交的联系表单,但我确实希望它有一些体面的自定义样式。当然这也没什么特别的,不过它有重置的默认字体与颜色。而且如果你需要扩大中央内容的区域,你可以找到宽度值:附加到外部容器的750px属性。最好理解这些基本样式,虽然并不是什么非常特别的内容。

利用jQuery达到平滑滚动效果

最后一块代码内容非常简单,就算你不懂脚本。我在用于结束的</body>之前添加了一个新标签,指向固定导航锚链接。无论什么时候当用户点击这个链接,我们输出散列值并立即滚动到页面部分。

$(function(){
  $("#nav a").click(function(e){
    e.preventDefault();
    $('html,body').scrollTo(this.hash,this.hash); 
  });
});

jQuery .click()方法包含了一个事件处理器参数,通过这个参数我们能取消默认行为,以便浏览器不会跳转页面。jQuery scrollTo运行针对当前的链接值this.hash。

这个方法很容易掌握,因为你可以很快的实现页面内容。我肯定还有许多其他类似的jQuery scrollTo相关插件,如果你有时间都可以尝试一下。

结语

简单网页不需要复杂的菜单系统,利用本文介绍的技术可以帮助组织网页内容。我希望本教程能够帮助开发者创建简单的页面布局。jQuery是可扩展的,且很容易被扩展这个代码库到你自己的 jQuery插件中。欢迎下载我的源代码,将这个效果运用到以后的作品中。  

我是原文)  


关于作者

不是你的星

极客主页:不是你的星

评论或回答

  1. 没有任何评论
评论请先登录



以后再转发,立刻下载!