1.什么是headroom.js?
headroom是用純Javascript寫的插件,用來隱藏和展示頁面元素,從而為頁面留下更多空間。比如使用headroom能使導航欄當頁面下滾時消失,當頁面上滾時候又出現。(查看效果)
2.工作原理
通過感應目標元素不同的3種狀態(原始,下滾,上滾),為目標元素更改相應的class,通過相應的class的css樣式的變化得到所要的效果。
3.如何使用
(以下的例子是基于bootstrap框架和jquery插件的,在bootstrap框架下可以快速寫出導航欄navbar,然后以jquery插件方式對導航欄navbar調用headroom()。)
首先需要引用headroom.js和jQuery.headroom.js。將以下的代碼加入到你的代碼中。headroom.js作用:感應元素不同的狀態為之更改相應的class。jQuery.headroom.js作用:提供jquery插件方式和Data-API方式調用headrooom()。
<script type="text/javascript" src="https://rawgithub.com/WickyNilliams/headroom.js/master/dist/headroom.js"></script><script type="text/javascript" src="https://rawgithub.com/WickyNilliams/headroom.js/master/src/jQuery.headroom.js"></script>
因為headroom()函數傳入的參數option對象的默認值如下。
?
{// 在元素沒有固定之前,垂直方向的偏移量(以px為單位)offset : 0,// scroll tolerance in px before state changestolerance : 0,// 對于每個狀態都可以自定義css classes classes : {// 當元素初始化后所設置的classinitial : "headroom",// 向上滾動時設置的classpinned : "headroom--pinned",// 向下滾動時所設置的classunpinned : "headroom--unpinned"} }
?
由此可知原始的狀態對應的class是headroom,下滾時的class是headroom--pinned,上滾時的class是headroom--unpinned。所以我們要添加下面的樣式,通過css的trasition屬性達到變換效果。
?
<style type="text/css">.headroom {position: fixed;top: 0;left: 0;right: 0;transition: all .2s ease-in-out;}.headroom--unpinned {top: -100px;}.headroom--pinned {top: 0;}</style>
?
之后添加下面的js代碼,使用jquery插件的方式調用。".navbar-fixed-top"只是用來獲取導航欄navbar,也可以用其他選擇器來獲取navbar目標元素
?
<script type="text/javascript"> $(".navbar-fixed-top").headroom(); </script>
?
做完了上述步驟,理論上你就可以看到headroom的效果了,如果沒有成功可能是以下的原因:
1、js的引用順序錯誤,因為一些js要用到其他js才能運行的,所以必須放在其他的js之后。例如
<script type="text/javascript">$(".navbar-fixed-top").headroom(); </script>
必須放在headroom.js和jQuery.headroom.js之后,而headroom.js和jQuery.headroom.js必須放在jQuery.js之后。
2、將$(".navbar-fixed-top").headroom(); 放在主體html代碼之前,如放在<head></head>中,因為在主體html代碼之前,navbar元素還沒加載就調用 了headroom(),所以無效。應該用以下代碼替換之,表示等文檔加載完畢再調用。
<script type="text/javascript">$("doucument").ready(fuction(){$(".navbar-fixed-top").headroom(); }); </script>
上述的效果只是通過css自帶的trasition屬性來實現效果,比較單調。不過可以結合animate.css實現更多的漂亮的消失和出現的效果。(查看效果)
animate.css使用純css為各種元素實現不同的動畫效果,每一種class對應一種動畫效果,所以將animate.css引入代碼后headroom()可以直接使用已經寫好的class。(animate.css下載)
我基于bootstrap和jquery寫得例子。
?
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>Bootstrap 101 Template</title> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <!-- Bootstrap --> 7 <link rel="stylesheet" href="http://cdn.bootcss.com/twitter-bootstrap/3.0.3/css/bootstrap.min.css"> 8 9 <link rel="stylesheet" href="I:/webpage/animate/animate.css"> 10 11 <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> 12 <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> 13 <!--[if lt IE 9]> 14 <script src="http://cdn.bootcss.com/html5shiv/3.7.0/html5shiv.min.js"></script> 15 <script src="http://cdn.bootcss.com/respond.js/1.3.0/respond.min.js"></script> 16 <![endif]--> 17 <style type="text/css"> 18 .headroom {position: fixed;top: 0;left: 0;right: 0;transition: all .2s ease-in-out;} 19 .headroom--unpinned {top: -100px;} 20 .headroom--pinned {top: 0;} 21 </style> 22 23 <style type="text/css"> 24 .scrollspy-example { 25 height: 1200px; 26 overflow: auto; 27 position: relative; 28 } 29 </style> 30 31 32 </head> 33 <body> 34 35 <!-- 頁眉大屏顯示 --> 36 <div class="jumbotron"> 37 <div class="container"> 38 <h1>Hello, world!</h1> 39 <p>This is a template for a simple marketing or informational website. It includes a large callout called a jumbotron and three supporting pieces of content. Use it as a starting point to create something more unique.</p> 40 <p><a class="btn btn-primary btn-lg" role="button">Learn more ?</a></p> 41 </div> 42 </div> 43 44 <div class="container"> 45 46 <!-- 導航欄 --> 47 <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation" id="example"> 48 <div class="navbar-header"> 49 <a class="navbar-brand" href="#">w3school</a> 50 </div> 51 52 <div class="collapse navbar-collapse" id="tem"> 53 <ul class="nav navbar-nav"> 54 <li class="active"><a href="#php">PHP</a></li> 55 <li><a href="#js">JS</a></li> 56 <li class="dropdown"> 57 <a href="#" class="dropdown-toggle" data-toggle="dropdown">database<b class="caret"></b></a> 58 59 <ul class="dropdown-menu"> 60 <li><a href="#mysql">MySQL</a></li> 61 <li><a href="#pgsql">PostgreSQL</a></li> 62 <li><a href="#mgdb">MogoDB</a></li> 63 </ul> 64 </li> 65 </ul> 66 </div> 67 </nav> 68 69 <!-- 主體內容--> 70 <div data-spy="scroll" data-target="#example" data-offset="0" class="scrollspy-example"> 71 <h4 id="php">PHP</h4> 72 <p>PHP, an acronym for Hypertext Preprocessor, is a widely-used open source general-purpose scripting language. It is an HTML embedded scripting language and is especially suited for web development. The basic syntax of PHP is similar to C, Java, and Perl, and is easy to learn. PHP is used for creating interactive and dynamic web pages quickly, but you can do much more with PHP. 73 </p> 74 <h4 id="js">JS</h4> 75 <p> 76 JavaScript is a cross-platform, object-oriented scripting language developed by Netscape. JavaScript was created by Netscape programmer Brendan Eich. It was first released under the name of LiveScript as part of Netscape Navigator 2.0 in September 1995. It was renamed JavaScript on December 4, 1995. As JavaScript works on the client side, It is mostly used for client-side web development. 77 </p> 78 <h4 id="mysql">MySQL</h4> 79 <p> 80 MySQL tutorial of w3cschool is a comprhensive tutorial to learn MySQL. We have hundreds of examples covered, often with PHP code. This helps you to learn how to create PHP-MySQL based web applications. 81 </p> 82 <h4 id="pgsql">PostgreSQL</h4> 83 <p> 84 In 1986 the Defense Advanced Research Projects Agency (DARPA), the Army Research Office (ARO), the National Science Foundation (NSF), and ESL, Inc sponsored Berkeley POSTGRES Project which was led by Michael Stonebrakessr. In 1987 the first demo version of the project is released. In June 1989, Version 1 was released to some external users. Version 2 and 3 were released in 1990 and 1991. Version 3 had support for multiple storage managers, an query executor was improved, rule system was rewritten. After that, POSTGRES has been started to be implemented in various research and development projects. For example, in late 1992, POSTGRES became the primary data manager for the Sequoia 2000 scientific computing project4. User community around the project also has been started increasing; by 1993, it was doubled. 85 </p> 86 <h4 id="mgdb">MongoDB</h4> 87 <p> 88 The term NoSQL was coined by Carlo Strozzi in the year 1998. He used this term to name his Open Source, Light Weight, DataBase which did not have an SQL interface.In the early 2009, when last.fm wanted to organize an event on open-source distributed databases, Eric Evans, a Rackspace employee, reused the term to refer databases which are non-relational, distributed, and does not conform to atomicity, consistency, isolation, durability - four obvious features of traditional relational database systems. 89 </p> 90 <p> 91 After reading the largest third party online MySQL tutorial by w3cschool, you will be able to install, manage and develop PHP-MySQL web applications by your own. We have a comprehensive, SQL TUTORIAL, which will help you to understand how to prepare queries to fetch data against various conditions. 92 </p> 93 94 </div> 95 </div> 96 97 98 <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> 99 <script src="http://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script> 100 <!-- Include all compiled plugins (below), or include individual files as needed --> 101 <script src="http://cdn.bootcss.com/twitter-bootstrap/3.0.3/js/bootstrap.min.js"></script> 102 103 104 <script type="text/javascript" src="https://rawgithub.com/WickyNilliams/headroom.js/master/dist/headroom.js"></script> 105 106 <script type="text/javascript" src="https://rawgithub.com/WickyNilliams/headroom.js/master/src/jQuery.headroom.js"></script> 107 108 <script type="text/javascript"> 109 110 $(".navbar-fixed-top").headroom(); 111 112 </script> 113 114 115 </body> 116 </html>
?
原文地址:http://blog.csdn.net/chenyulearn/article/details/19606751
?
?
?