• 错层


    其实就是上篇的Parallax

    其中比较传统的一种方式,鼠标滚动的时候,不同的元素向着不同的方向用不同的速度来运动。

    这样会产生一种错落有致的视觉效果,当然如果做得有河蟹感的话。。

    今天分析了一个简单但是我觉得做得很好的网站,js方面也是我喜欢的风格。

    HTML结构采用nav section footer的三段式,

    section分出两个div,一个是主体画面的侧导航,一个是主体div。

    主体div旁边还有一个aside,id为secondary_content,不过这和我所关心的动画效果无关。

    主体div下分5个section 为主体内容。

    首先抛开js不看,css要做到基本的遮罩以及浮动元件的定位。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title> </title>
     <link rel="stylesheet" type="text/css" media="screen" href="reset.css">
        <link rel="stylesheet" type="text/css" media="screen" href="global.css">
        <style type="text/css" media="screen">
        #case_studies #cs_nyu-stern {
            background-image: url(images/NYU_Background1.jpg);
        }
        #case_studies #cs_nyu-stern .contentWrapper {
            background-image: url(images/Stern_Casestudy_logo.png);
        }
        #case_studies #cs_nyu-stern .abstract {
            margin-left: 10px;
        }
        #case_studies #cs_cq_roll_call {
            background-image: url(images/cs_0002_2.jpg);
        }
        #case_studies #cs_cq_roll_call .contentWrapper {
            background-image: url(images/cs_0002_logo_2.png);
        }
        #case_studies #cs_cq_roll_call .abstract {
            margin-left: 370px;
        }
        #case_studies #cs_human-rights-watch {
            background-image: url(images/Sullivan_FG_00_Bkgd_HRW_1.jpg);
        }
        #case_studies #cs_human-rights-watch .contentWrapper {
            background-image: url(images/Sullivan_FG_00_Banner_HRW_NewLogo3.png);
        }
        #case_studies #cs_human-rights-watch .abstract {
            margin-left: 50px;
        }
        #case_studies #cs_discover-ready {
            background-image: url(images/cs_0004_2.jpg);
        }
        #case_studies #cs_discover-ready .contentWrapper {
            background-image: url(images/cs_0004_logo_2.png);
        }
        #case_studies #cs_discover-ready .abstract {
            margin-left: 240px;
        }
        #case_studies #cs_schwab {
            background-image: url(images/Schwab_Home_artwork.jpg);
        }
        #case_studies #cs_schwab .contentWrapper {
            background-image: url(images/Schwab_Home_logo21.png);
        }
        #case_studies #cs_schwab .abstract {
            margin-left: 340px;
        }
        </style>
        <script type="text/javascript" src="jquery.js"></script>
        <script type="text/javascript" src="jquery.plugins.js"></script>
        <script type="text/javascript" src="main.js"></script>
    </head>
    
    <body class="home">
        <header class="global">
            <div class="contentWrapper">
                <h1 id="siteHeader"><a href="Sullivan NYC   Home.html">Sullivan</a>
                </h1>
                <nav class="global">
                    <ul>
                        <li><a href="http://www.sullivannyc.com/work/">Work</a>
                        </li>
                        <li><a href="http://www.sullivannyc.com/services/">Services</a>
                        </li>
                        <li><a href="http://www.sullivannyc.com/clients/">Clients</a>
                        </li>
                        <li><a href="http://www.sullivannyc.com/people/">People</a>
                        </li>
                        <li><a href="http://www.sullivannyc.com/careers/">Careers</a>
                        </li>
                        <li><a href="http://www.sullivannyc.com/contact/">Contact</a>
                        </li>
                        <li><a href="http://foldmag.com/" target="_blank">Ideas</a>
                        </li>
                        <li><a href="http://clients.sullivannyc.com/" target="_blank" class="login">Client Login</a>
                        </li>
                    </ul>
                </nav>
            </div>
        </header>
        <!-- /header End -->
        <section id="page">
            
            <!-- cs_nav是右边的浮动导航-->
            <div id="cs_nav" style="margin-top: 0px; position: fixed;">
                <ul>
                    <li class="case" style="display: list-item;"><a href="http://www.sullivannyc.com/#cs_nyu-stern">Case Study Title</a>
                    </li>
                    <li class="case" style="display: list-item;"><a href="http://www.sullivannyc.com/#cs_cq_roll_call">Case Study Title</a>
                    </li>
                    <li class="case" style="display: list-item;"><a href="http://www.sullivannyc.com/#cs_human-rights-watch">Case Study Title</a>
                    </li>
                    <li class="case current" style="display: list-item;"><a href="http://www.sullivannyc.com/#cs_discover-ready">Case Study Title</a>
                    </li>
                    <li class="case" style="display: list-item;"><a href="http://www.sullivannyc.com/#cs_schwab">Case Study Title</a>
                    </li>
                </ul>
            </div>
            <div id="case_studies" style="height: 1915px;">
                <!-- 内有5个section 即主体部分 -->
                <section id="cs_nyu-stern" style="height: 383px; display: block;  100%; background-position: 50% -377px;"><!-- js控制的默认样式直接写在这里了 -->
                    <div class="contentWrapper innerScroll" style="height: 383px; background-position: 50% -207px;">
                        <div class="abstract" style="margin-top: 291.5px;">
                            <header>
    
                                <h2>transform information
                                    <strong>
                                        <em class="sc">into</em>inspiration</strong>
                                </h2>
    
                            </header>
                            <div class="body">
                                <p>We transformed the typical B-school orientation into an experience that challenged expectations about the program. And business.</p>
    
                                <a href="http://www.sullivannyc.com/casestudy/nyu-stern/" class="more">Learn More</a>
    
                            </div>
                        </div>
                    </div>
                </section>
    
                <section id="cs_cq_roll_call" style="height: 383px; display: block;  100%; background-position: 50% -336px;">
                    <div class="contentWrapper innerScroll" style="height: 383px; background-position: 50% -248px;">
                        <div class="abstract" style="margin-top: 291.5px;">
                            <header>
    
                                <h2>
                                    put structure
                                    <em class="sc">to</em>
                                    <strong>vision</strong>
                                </h2>
    
    
                            </header>
                            <div class="body">
                                <p>
                                    To unite the most powerful names in political news, we had to transform the way our nation's biggest influencers stay informed.</p>
    
    
                                <a href="http://www.sullivannyc.com/casestudy/cq_roll_call/" class="more">Learn More</a>
    
                            </div>
                        </div>
                    </div>
                </section>
    
                <section id="cs_human-rights-watch" style="height: 383px; display: block;  100%; background-position: 50% -294px;">
                    <div class="contentWrapper innerScroll" style="height: 383px; background-position: 50% -289px;">
                        <div class="abstract" style="margin-top: 291.5px;">
                            <header>
    
                                <h2>
                                    turn the complex&nbsp;
                                    <em class="sc">into</em>&nbsp;
                                    <strong>the compelling</strong>
                                </h2>
    
    
                            </header>
                            <div class="body">
                                <p>
                                    We created a communications platform that immediately connected the value of HRW's complex work to donors.&nbsp;</p>
    
    
                                <a href="http://www.sullivannyc.com/casestudy/human-rights-watch/" class="more">Learn More</a>
    
                            </div>
                        </div>
                    </div>
                </section>
    
                <section id="cs_discover-ready" style="height: 383px; display: block;  100%; background-position: 50% -253px;">
                    <div class="contentWrapper innerScroll" style="height: 383px; background-position: 50% -331px;">
                        <div class="abstract" style="margin-top: 291.5px;">
                            <header>
    
                                <h2>
                                    breathe life
                                    <em class="sc">into</em>
                                    <strong>business</strong>
                                </h2>
    
    
                            </header>
                            <div class="body">
                                <p>
                                    A professional services firm that caters to large corporations differentiated themselves by talking to people like people.</p>
    
    
                                <a href="http://www.sullivannyc.com/casestudy/discover-ready/" class="more">Learn More</a>
    
                            </div>
                        </div>
                    </div>
                </section>
    
                <section id="cs_schwab" style="height: 383px; display: block;  100%; background-position: 50% -212px;">
                    <div class="contentWrapper innerScroll" style="height: 383px; background-position: 50% -372px;">
                        <div class="abstract" style="margin-top: 291.5px;">
                            <header>
    
                                <h2>
                                    convert decisions
                                    <em class="sc">&nbsp;into</em>
                                    <strong>action</strong>
                                </h2>
    
    
                            </header>
                            <div class="body">
                                <p>
                                    Convincing financial advisors to go independent is just the beginning. Showing them how to get there takes a plan.</p>
    
    
                                <a href="http://www.sullivannyc.com/casestudy/schwab/" class="more">Learn More</a>
    
                            </div>
                        </div>
                    </div>
                </section>
    
            </div>
            <!-- /#case_studies -->
    
    
            <aside id="secondary_content">
    
                <section id="recent_content" class="clear" style="display: block;">
                    <div class="contentWrapper clear">
                        <section id="twitter_feed">
                            <header class="local_header">
                                <span class="ico"></span>
                                <a href="http://www.twitter.com/sullivannyc" class="more">Follow Us</a>
                            </header>
                            <div class="body">
                                <ul>
                                    <li>Less is truly more, say the makers of <a class="user" href="http://twitter.com/@MinimalismFilm">@MinimalismFilm</a>, a documentary about the important things <a href="http://search.twitter.com/search?q=%23design">#design</a>  <a href="http://search.twitter.com/search?q=%23life">#life</a>  <a href="http://t.co/zhbfSm3Cex">http://t.co/zhbfSm3Cex</a>
                                        <span class="date">05:03AM Jun 26, 2014</span>
                                    </li>
                                    <li class="even">Apple's always been on the leading edge of <a href="http://search.twitter.com/search?q=%23design">#design</a>, but slow to "respond". That's about to change via <a class="user" href="http://twitter.com/@alistapart">@alistapart</a>  <a href="http://t.co/oZfMRkldCA">http://t.co/oZfMRkldCA</a>
                                        <span class="date">09:13PM Jun 25, 2014</span>
                                    </li>
                                </ul>
                            </div>
                        </section>
                        <!--/#twitter_feed -->
    
                        <section id="news_feed">
                            <header class="local_header">
                                <h2>In the News</h2>
                            </header>
                            <div class="body">
    
                                <ul class="grid list">
    
    
                                    <li>
                                        <span class="date">Posted on: Jun 24, 2014</span>
                                        <h3>Barbara Apple Sullivan discusses Sullivan’s evolution in HuffPo’s “Women in Business Q&amp;A.”</h3>
    
                                        <a href="http://www.huffingtonpost.com/laura-dunn/women-in-business-qa-barb_b_5491387.html" class="more" target="_blank">Read More</a>
                                        <cite class="byline">via:
                                            <span>The Huffington Post</span>
                                        </cite>
    
                                    </li>
    
                                    <li>
                                        <span class="date">Posted on: Apr 08, 2014</span>
                                        <h3>Barbara Apple Sullivan calls B.S. on the distinction between B2B and B2C marketing strategies.</h3>
    
                                        <a href="http://adage.com/article/btob/i-call-b-s-b-b-b-c/292505/" class="more" target="_blank">Read More</a>
                                        <cite class="byline">via:
                                            <span>AdAge</span>
                                        </cite>
    
                                    </li>
    
                                    <li>
                                        <span class="date">Posted on: Feb 27, 2014</span>
                                        <h3>Partner Nicole Ferry shows how financial services firms can still build brands that work.</h3>
    
                                        <a href="http://www.economistgroup.com/leanback/the-next-big-thing/financial-branding-wolf-of-wall-street/" class="more" target="_blank">Read More</a>
                                        <cite class="byline">via:
                                            <span>The Economist</span>
                                        </cite>
    
                                    </li>
    
                                    <li>
                                        <span class="date">Posted on: Jan 29, 2014</span>
                                        <h3>Partner John Paolini discusses whether an unwieldy name will doom Obama’s myRA plan.</h3>
    
                                        <a href="http://www.marketwatch.com/story/will-unwieldy-name-doom-obamas-myra-plan-2014-01-29" class="more" target="_blank">Read More</a>
                                        <cite class="byline">via:
                                            <span>The Wall Street Journal</span>
                                        </cite>
    
                                    </li>
    
    
                                </ul>
                                <a href="http://www.sullivannyc.com/news" class="all_news">view all news</a>
                            </div>
                        </section>
                        <!-- /#news_feed -->
    
                    </div>
                </section>
                <!-- /#recent_content -->
            </aside>
            <!-- /#white_papers -->
    
        </section>
        <!-- /#page -->
        <footer class="global" style="display: block;">
            <div class="contentWrapper">
                <div class="colWrap clear">
                    <div class="clear col two">
                        <h4>Locations</h4>
                        <div class="col">
    
                            <h5>New York</h5>
                            <address>
                                <span class="street-address">450 West 14th Street, 12th Floor</span>
                                <br>
                                <span class="region">New York</span>,
                                <abbr class="locality" title="New York">NY</abbr>
                                <span class="postal-code">10014</span>
                            </address>
                            <ul>
                                <li>
                                    <abbr title="Phone">p</abbr>.
                                    <span class="tel">212 888 2881</span>
                                </li>
                                <li>
                                    <abbr title="Fax">f</abbr>.
                                    <span class="tel">212 888 2766</span>
                                </li>
    
                                <li>
                                    <abbr title="Email">e</abbr>. <a class="email" href="mailto:info@sullivannyc.com">info@sullivannyc.com</a>
                                </li>
                            </ul>
    
    
                        </div>
    
                        <div class="col end">
    
                            <h5>Washington D.C.</h5>
                            <address>
                                <span class="street-address">1806 24th Street NW</span>
                                <br>
                                <span class="region">Washington</span>,
                                <abbr class="locality" title="New York">DC</abbr>
                                <span class="postal-code">20008</span>
                            </address>
                            <ul>
                                <li>
                                    <abbr title="Phone">p</abbr>.
                                    <span class="tel">202 667 2770</span>
                                </li>
                                <li>
                                    <abbr title="Fax">f</abbr>.
                                    <span class="tel">202 667 2771</span>
                                </li>
    
                            </ul>
    
    
                        </div>
                    </div>
                    <div id="social" class="clear col two end">
                        <h4>Follow Us</h4>
                        <ul class="clear social_links">
    
                            <li><a href="http://www.linkedin.com/company/sullivan" class="li">LinkedIn</a>
                            </li>
    
                            <li><a href="http://twitter.com/#!/sullivannyc" class="tw">Twitter</a>
                            </li>
    
                            <li><a href="http://www.facebook.com/pages/Sullivan/165770676800241" class="fb">Facebook</a>
                            </li>
    
                            <li><a href="http://www.sullivannyc.com/blog/rss" class="rss">RSS</a>
                            </li>
                            <li><a href="http://www.sullivannyc.com/#mailing_list" class="mailing_list">Subscribe</a>
                            </li>
                        </ul>
                    </div>
                </div>
                <div id="copyright">
                    <p>Copyright 2014 Sullivan &amp; Company</p>
                    <a href="http://clients.sullivannyc.com/" target="_blank" class="login">Client Login</a>
                </div>
            </div>
            <div style="display:none">
                <div id="mailing_list">
                    <div class="header">
                        <h2 class="blockHeader">subscribe to our mailing list</h2>
                    </div>
                    <form action="http://sullivan2.createsend.com/t/y/s/cldidu/" method="post" id="subForm" class="clear">
                        <p>Sign up for Sullivan news and updates.</p>
                        <div>
                            <label for="name">Name</label>
                            <input type="text" name="cm-name" id="name" class="text">
                        </div>
                        <div>
                            <label for="cldidu-cldidu">Email</label>
                            <input type="text" name="cm-cldidu-cldidu" id="cldidu-cldidu" class="text">
                        </div>
                        <div>
                            <input type="hidden" name="cm-f-nhkok" id="SubscribedFrom" value="http://www.sullivannyc.com/">
                            <input class="button" name="commit" type="submit" value="Sign up">
                        </div>
                    </form>
                </div>
            </div>
    
        </footer>
    
    </body>
    
    </html>
    Sullivan_NYC Home_files

    传统模式的parallax之所以简单,就是基本上他只要控制两种层级元素的运动速度和方向,就能获得很好的效果,

    而css已经可以完成所有运动的参照速度,鼠标滚动产生的原始速度,以及自然的滚动方向。

    如果这时候再用js去控制这个原始画面上z-index高于背景的文字或者图片向着页面行进(上或者下)方向运动的话,

    比如速度是原始速度的十分之一的时候,效果已经就很动人了。

    /*
     * Sullivan Agency Website
     * Global Style Sheet
    
     * Author: P. R. May
    */
    
    
    /*
     *
     * Typography
     *
    */
    
    ::selection {
      background: #fff200;
      color: #222;
    }
    ::-moz-selection {
      background: #fff200;
      color: #222;
    }
    
    body {
      -webkit-font-smoothing: subpixel-antialiased;
    }
    /* Serif */
    body, button, textarea, input {
      color: #3d3d3d;
      font: 14px/22px "Georgia", Times, "Times New Roman", serif;
    }
    
    a {
      color: #ED1C24;
      text-decoration: none;
    }
    a.more {
      background: url(images/arrowIco.png) no-repeat 100% 0;
      color: #fff200;
      display: block;
      float: left;
      font-size: 10px;
      height: 9px;
      letter-spacing: 1px;
      line-height: 9px;
      padding: 0 15px 0 0;
      text-decoration: none;
      text-transform: uppercase;
    }
    a.more:hover {
      text-decoration: underline;
    }
    
    h1, h2, h3, h4, h5, h6 {
    /*  color: #ED1C24;*/
      font-style: italic;
      font-weight: normal;
    }
    
    h2 {
      font-size: 32px;
      line-height: 36px;
    }
    
    h2.blockHeader,
    h3.blockHeader {
      background: url(images/yellowStripe.png);
      color: #3d3d3d;
      font-size: 18px;
      height: 50px;
      line-height: 50px;
      text-align: center;
    }
    
    /*
     *
     * Global Elements
     *
    */
    html, body {
      height: 100%;
    }
    body {
      background: #FFF url(images/whiteStripe.png) fixed;
      width: 100%!important;
    }
    body.home {
      background: #272727 url(images/grayStripe.png) fixed;
    }
    body.interior {
      background: #272727 url(images/grayStripe.png) fixed;
    }
    .contentWrapper,
    .colWrap {
      width: 960px;
    }
    .contentWrapper {
      margin: 0 auto;
      position: relative;
      top: 0;
    }
    
    #pseudoBg {
      background-attachment: fixed;
      background-position: 50% 50%;
      background-repeat: no-repeat;
      height: 100%;
      left: 0;
      overflow: hidden;
      position: fixed;
      top: 0;
      width: 100%;
      z-index: 0;
    }
    #pseudoBg.left {
      background-position: 0 50%;
    }
    
    
    /* Header */
    header.global {
      background: #111 url(images/headerGrad.png) repeat-x 0 0;
      height: 60px;
      position: fixed;
      width: 100%;
      z-index: 100;
    }
    #siteHeader {
      float: left;
    }
    #siteHeader a {
      background: url(images/logo.png) no-repeat 0 50%;
      display: block;
      height: 60px;
      text-indent: -9999px;
      width: 122px;
    }
    
    nav.global {
      float: right;
      font-style: italic;
      text-shadow: 0 1px 5px #000;
    }
    nav.global ul {
      border-right: 1px solid rgba(0, 0, 0, 0.4);
      height: 60px;
      margin: 0;
    }
    nav.global li {
      float: left;
    }
    nav.global a {
      border-left: 1px solid rgba(0, 0, 0, 0.4);
      border-right: 1px solid rgba(255, 255, 255, 0.07);
      color: #FFF;
      display: block;
      height: 60px;
      line-height: 60px;
      padding: 0 22px;
      text-decoration: none;
     -webkit-transition: background-color .15s linear;
        -moz-transition: background-color .15s linear;
             transition: background-color .15s linear;
    }
    nav.global a:hover,
    nav.global a:active,
    nav.global a.current {
      color: #fff200;
    }
    nav.global a:hover {
      background: rgba(255, 255, 255, 0.05);
    }
    nav.global a:active {
      background-color: #373737;
     -webkit-box-shadow: inset 0 1px 4px #000;
        -moz-box-shadow: inset 0 1px 4px #000;
          -o-box-shadow: inset 0 1px 4px #000;
             box-shadow: inset 0 1px 4px #000;
    }
    nav.global a.home {
      background: url(images/homeIco.png) no-repeat 0 -60px;
      border-left: none;
      padding-left: 0;
      text-indent: -9999px;
      width: 18px;
    }
    nav.global a.home:hover,
    nav.global a.home.current {
      background-position: 0 0;
    }
    nav.global a.home:active {
      -webkit-box-shadow: none;
         -moz-box-shadow: none;
           -o-box-shadow: none;
              box-shadow: none;
    }
    nav.global a.login {
      background: url(images/lockIco.png) no-repeat 17px -60px;
        padding: 0 24px 0 36px;
    }
    nav.global a.login:hover {
      background-color: rgba(255, 255, 255, 0.05);
      background-position: 17px 0;
    }
    
    /* Page */
    section#page {
      padding: 60px 0 0 0;
      position: relative;
      min-height: 600px;
      width: 100%;
      z-index: 2;
    }
    .interior.alt section#page {
      margin: 0 auto;
      width: 100%;
    }
    #secondary_content {
      background: #272727 url(images/grayStripe.png);
      border-top: 5px solid rgba(255, 255, 255, 0.2);
    }
    
    /* Footer */
    footer.global {
      background: #222 url(images/blackStripe.png);
      border-top: 1px solid rgba(255, 255, 255, 0.05);
      clear: both;
      color: #A7A7A7;
      height: 479px;
      padding: 40px 0 0 0;
      position: relative;
      z-index: 2;
    }
    
    footer.global .col {
      float: left;
      margin-bottom: 10px;
      width: 230px;
    }
    footer.global .col.two {
      width: 470px;
    }
    footer.global .col.end {
      float: right;
    }
    footer.global h4,
    footer.global h5 {
      color: #fff200;
      font-size: 14px;
    }
    footer.global h4 {
      border-bottom: 1px solid rgba(255, 255, 255, 0.075);
      color: #fff200;
      margin: 0 0 20px 0;
      padding: 0 0 19px 0;
    }
    
    footer.global address,
    footer.global ul {
      display: block;
      margin-bottom: 5px;
    }
    footer.global  a {
      color: #fff200;
      text-decoration: underline;
    }
    footer.global  a.map {
      background: url(images/arrowIco.png) no-repeat 0 2px;
      font-size: 10px;
      letter-spacing: 1px;
      padding: 0 0 0 18px;
      text-transform: uppercase;
    }
    
    #social ul {
      margin: 0;
      padding: 0;
    }
    #social li {
      padding: 0;
      float: left;
      margin:  0 0 10px 0;
      width: 235px;
    }
    .social_links a {
      background: url(images/socialIco.png) no-repeat 0 0;
      color: #A7A7A7;
      display: block;
      font-size: 14px;
      font-style: italic;
      height: 26px;
      line-height: 26px;
      padding: 0 0 0 35px;
      text-decoration: none;
    }
    
    
    #copyright {
      border-top: 1px solid rgba(255, 255, 255, 0.075);
      clear:both;
      padding: 20px 0 0 0;
    }
    #copyright .login {
      background: url(images/arrowIco.png) no-repeat 100% 2px;
      font-size: 10px;
      letter-spacing: 1px;
      padding: 0 18px 0 0;
      text-transform: uppercase;
    }
    #copyright p {
      color: #666;
      float: right;
      font-family: "Arial" sans-serif;
      font-size: 10px;
    }
    
    /*
     *
     * Home Page
     *
    */
    
    
    /* Intro Animation Styles */
    .home #message, .home #case_studies section, .home footer.global, .home #recent_content {
      display: none;
    }
    
    
    #btb_ribbon {
      position: absolute;
      right: -4px;
      top: -4px;
    }
    
    
    
    /* Case Studies */
    #case_studies {
      margin-top: -60px;
      overflow: hidden;
      position: relative;
      z-index: 10;
    }
    #case_studies section,
    #case_studies section .contentWrapper {
      background-attachment: fixed;
      background-position: 50% 0;
      background-repeat: no-repeat;
    }
    #case_studies section,
    #case_studies section .contentWrapper {
      overflow: hidden;
      position: relative;
    }
    #case_studies section {
    /*  border-bottom: 5px solid red;*/
    /*  -webkit-background-size: cover;*/
    }
    #case_studies section.lock_bg,
    #case_studies section.lock_bg .contentWrapper {
      background-attachment: fixed;
      background-position: 50% 0;
    }
    #case_studies .abstract {
      font-style: italic;
      position: absolute;
    }
    #case_studies header {
      background: #fff200;
      float: left;
      padding: 13px 20px 10px 20px;
      position: relative;
      z-index: 25;
      -webkit-box-shadow: 1px 5px 5px rgba(0, 0, 0, 0.5);
         -moz-box-shadow: 1px 5px 5px rgba(0, 0, 0, 0.5);
           -o-box-shadow: 1px 5px 5px rgba(0, 0, 0, 0.5);
              box-shadow: 1px 5px 5px rgba(0, 0, 0, 0.5);
    }
    #case_studies header h2 {
      color: #3d3d3d;
      font-size: 22px;
    }
    #case_studies header h2 em {
      color: #9D9506;
      font-size: 16px;
      text-transform: uppercase;
    }
    #case_studies header h2 strong {
      color: #ED1C24;
      font-weight: normal;
    }
    #case_studies .body {
      background: #FFF;
      border: 1px solid #FFF;
      clear: both;
      height: 80px;
      padding: 0 20px 0 20px;
      position: relative;
      width: 498px;
      z-index: 50;
      -webkit-box-shadow: 1px 5px 5px rgba(0, 0, 0, 0.5);
         -moz-box-shadow: 1px 5px 5px rgba(0, 0, 0, 0.5);
           -o-box-shadow: 1px 5px 5px rgba(0, 0, 0, 0.5);
              box-shadow: 1px 5px 5px rgba(0, 0, 0, 0.5);
    }
    #case_studies .body p {
      margin: 0;
      padding: 18px 10px 0 0;
      width: 430px;
    }
    #case_studies .body .more {
      background: url(images/moreIco.png) no-repeat 0 0;
      display: block;
      height: 80px;
      padding: 0!important;
      position: absolute;
      right: 0;
      text-indent: -9999px;
      top: 0;
      width: 80px;
    }
    #case_studies .body .more:hover {
      background-position: 0 -80px;
    }
    
    /* Case Studies Nav (added via sullivan.js) */
    #cs_nav {
      position: fixed;
      right: 30px;
      top: 220px;
      width: 25px;
      z-index: 30;
    }
    #cs_nav ul {
      margin: 0;
    }
    
    #cs_nav li {
      display: none;
      margin-bottom: 10px;
      padding: 0 0 0 5px;
    }
    #cs_nav li a {
      background: rgb(255, 255, 255);
      background: rgba(255, 255, 255, 0.75);
      display: block;
      height: 20px;
      text-indent: -9999px;
      width: 20px;
    /*  -webkit-border-radius: 20px;
         -moz-border-radius: 20px;
              border-radius: 20px;  */
      -webkit-box-shadow: 1px 2px 2px rgba(0, 0, 0, 0.3);
         -moz-box-shadow: 1px 2px 2px rgba(0, 0, 0, 0.3);
           -o-box-shadow: 1px 2px 2px rgba(0, 0, 0, 0.3);
              box-shadow: 1px 2px 2px rgba(0, 0, 0, 0.3);
    }
    #cs_nav li a:hover {
      background: #FFF;
      border: 2px solid #fff200;
      height: 16px;
      width: 16px;
    }
    #cs_nav li:hover,
    #cs_nav li.current {
      background: url(images/cs_nav_tick.png) no-repeat 0 50%;
    }
    #cs_nav li.current a {
      background: #fff200;
    }
    
    
    /* White Papers */
    #white_papers {
      background: #111;
      padding: 40px 0 20px 0;
    }
    #white_papers .contentWrapper {
      overflow: hidden;
      position: relative;
    }
    #white_papers .local_header {
      background: url(images/car_stripe_horz.png) repeat-x 0 100%;
      margin-bottom: 20px;
    }
    #white_papers .local_header a.more {
      margin-top: 25px;
    }
    #white_papers .local_header h2 {
      color: #fff200;
      font-size: 24px
    }
    #white_papers .local_header p {
      color: #666;
      float: right;
      font-size: 12px;
      font-style: italic;
      height: 48px;
      line-height: 61px;
    }
    #white_papers .carousel {
      padding: 0 0 30px 0;
      position: relative;
    }
    #white_papers .carousel .items {
      background: url(images/car_stripe_outer.png) repeat-y 50% 0;
      height: 160px;
      margin: 0 auto 0 auto;
      width: 800px;
    }
    #white_papers .carousel .page {
      background: url(images/car_stripe_inner.png) repeat-y 50% 0;
    }
    #white_papers .carousel .item {
      font-size: 26px;
      height: 150px;
      line-height: 32px;
      padding: 10px;
      width: 380px;
    }
    #white_papers .carousel .item a:hover {
      color: #fff200;
    }
    #white_papers .carousel .item img {
      float: left;
    }
    #white_papers .carousel .nav,
    #white_papers .carousel .nav ul {
      height: 10px;
      width: 885px;
    }
    #white_papers .carousel .nav {
      left: 35px;
      position: absolute;
      top: 140px;
      z-index: 20;
    }
    #white_papers .carousel .nav a {
      background: url(images/arrowsSmallYellow.png) no-repeat 0 0;
      display: block;
      height: 10px;
      text-indent: -9999px;
      width: 13px;
    }
    #white_papers .carousel .nav .prev {
      float: left;
    }
    #white_papers .carousel .nav .prev a {
      background-position: 0 0;
    }
    #white_papers .carousel .nav .prev a:hover {
      background-position: 0 -10px;
    }
    #white_papers .carousel .nav .next {
      float: right;
    }
    #white_papers .carousel .nav .next a {
      background-position: -13px 0;
    }
    #white_papers .carousel .nav .next a:hover {
      background-position: -13px -10px;
    }
    global.css

    虽然reset是一个单独的css文件,但从css的书写格式来看显然出自某种预处理器之手。

    右侧一串圆点或者方块的锚点,href到指定id,显然它的定位只要fixed就可以了。

    主体作为wrapper的那个大section设宽度100%,html行内有固定高度,position:relative,z-index比较低,min-height什么的也没有什么特别。

    内部五个section都是宽度100%,设了固定高度,block,在html内直接行内样式设定了原始的背景定位,例如background-position: 50% -253px;

    主体的大图都是五个section标签的背景图,为了让这些图片在“适当的时候”出现在主视区(说这么多废话是因为以前我没有意识到,不是让画面移动进来,而是它一直就在那儿)五大section将放弃背景初始的scroll属性,改为 background-attachment: fixed;

    这样明显的,布局的效果就有别于一般的流水账以及一筒拖了。

    然后js肯定会去改变背景的position,已经那些其他元素的位置。

    整站定义了一个叫Suli的对象,然后在这个对象里面做其他功能,

    JavaScript 中并没有真正的类,但JavaScript 中有构造函数和new 运算符。构造函数用来
    给实例对象初始化属性和值。任何JavaScript 函数都可以用做构造函数,构造函数必须使用new 运算符作为前缀来创建新的实例。
    用new的,即通过new运算符调用构造函数Function来创建函数
    不用new的,只是调用函数把返回值赋给变量。
    var alice = new Me('alice', 18, 'Coder');
    new 运算符改变了函数的执行上下文,同时改变了return 语句的行为。实际上,使用new后这个函数只会返回undefined,并且执行上下文是window(全局)对象,无意间创建了3个全局变量name,age,job。调用构造函数时不要丢掉new 关键字。
    当使用new 关键字来调用构造函数时,执行上下文从全局对象(window)变成一个空的上下文,这个上下文代表了新生成的实例。因此,this 关键字指向当前创建的实例。尽管理解起来有些绕,实际上其他语言内置类机制的实现也是如此。
    默认情况下,如果你的构造函数中没有返回任何内容,就会返回this——当前的上下文。要不然就返回任意非原始类型的值.
    实例化

    这些class methods在需要的情况下被new实例化即执行。

    ParallaxScroller方法就在判断不是ipad以后被实例化了。

    var Suli = Suli || {};
    ...
    ...
    ...
    
    Suli.ParallaxScroller = function (selector, nav, center, imageHeight) {
      this.selector = selector;
      this.offsets = [];
      this.viewport = window;
      this.nav = nav || false;
      this.center = center || false;
      this.imageHeight = imageHeight || 0;
      this.curIndex = 0;
    
      var self = this,
          $self = $(self.selector),
          $viewport = Suli.jQ.viewport,
          $nav,
          $navItem,
    
          _setOffsets = function () {
            for (var i = 0, len = $self.length; i < len; i++) {
              var offset = $self.eq(i).offset().top;
              self.offsets.push(offset);
            }
          },
    
          _onScroll = function () {
            var bgY = self.imageHeight,
                scrollTop = $viewport.scrollTop(),
                pageY = $self.height(),
                onCenter = Math.round(((pageY - bgY) + 1) / 2);
    
            for (var i = 0, len = $self.length; i < len; i++) {
              var $target = $self.eq(i),
                  $inner = $target.find('.innerScroll'),
                  offset = $target.offset().top,
                  bgTop = Math.round(scrollTop - offset),
                  bgLeft = (self.center) ? '50%' : '0';
    
              // Background Position
    
              $target
              .css({
                'backgroundPosition' : bgLeft + ' ' + (Math.round(bgTop * -0.1) + onCenter) + 'px'
              });
              $inner
              .css({
                'backgroundPosition' : bgLeft + ' ' + (Math.round(bgTop * 0.1) + onCenter) + 'px'
              });
    
    
              //  Navigation Highlight
              // (only runs if instance[nav] === true)
              if (self.nav && (scrollTop >= $target.offset().top - 500)) {
                if ($navItem) {
                  if ( ! $navItem.eq(i).hasClass('current')) {
                    if(scrollTop > 0) {
                      _toggleNav(i);
                    }
                  }
                }
              }
            }
    
            // Navigation Position
            // (only runs if instance[nav] === true)
            if (self.nav && $navItem) {
              var bottom = $(self.selector).eq($self.length - 1).offset().top;
              if ((bottom > 0) && scrollTop >= bottom) {
                // If we are at the bottom,
                // of document, nav should scroll up
                $nav.css({
                  'marginTop' : Math.round(api.getViewport().height * ($self.length - 1)),
                  'position' : 'absolute'
                });
              } else {
                // In the middle,
                // Nav is "fixed"
                $nav.css({
                  'marginTop' : 0,
                  'position' : 'fixed'
                });
              }
            }
          },
    
          _sizeSection = function () {
            _onScroll();
    
            $self
            .height(api.getViewport().height)
              .find('.innerScroll')
              .height(api.getViewport().height)
            .end()
              .parent()
              .height(api.getViewport().height * $self.length)
            .end()
              .find('.innerScroll .abstract').css({
                'marginTop' : (api.getViewport().height / 2) + 100
              });
          },
    
          _template = {
            nav : function () {
              var html = '';
              html += '<div id="cs_nav">';
              html += '<ul>';
              for (var i = 0, len = $self.length; i < len; i++) {
                var anchor = $('.innerScroll:eq('+ i +')').parent().attr('id');
    
                html += (i === 0) ? '<li class="case current">' : '<li class="case">';
                html += '<a href="#' + anchor +'">Case Study Title</a>';
                html += '</li>';
              }
              html += '</ul>';
              html += '</div>';
              return html;
            }
          },
    
          _addNav = function () {
    
            $self.parent().before(_template.nav);
            $nav = $('#cs_nav'),
            $navItem = $nav.find('li');
    
            $navItem.bind('click', api.move);
          },
    
          _toggleNav = function (index) {
            if ($nav) {
              self.curIndex = index;
              $navItem.eq(index).addClass('current').siblings().removeClass('current');
            }
          },
    
          api = {
            init : function () {
              _onScroll();
    
              if ($self.length > 1) {
                _sizeSection();
                _setOffsets();
                if (self.nav) {
                  _addNav();
                }
    
                // for (var i = 0; i < $self.length; i++) {
                //   var zBase = ($self.length - i);
                //   $self.eq(i).css(($self.length - i));
                // }
    
                $viewport.bind('resize', _sizeSection);
              }
    
              $viewport.scroll(_onScroll);
    
              return this;
            },
    
            getCurIndex : function () {
              return self.curIndex;
            },
    
            getLen : function () {
              return $self.length;
            },
    
            move : function (index) {
              var dur = 800,
                  next = (index.handleObj) ? $(this).index() : index,
                  offset = $self.eq(next).offset().top;
    
              if (self.curIndex !== next) {
                self.curIndex = next;
                Suli.utils.stopWheel(dur);
                Suli.utils.reBind($navItem, 'click', api.move, dur);
                $('html, body').stop().animate({
                   'scrollTop' : offset
                }, dur, 'easeOutExpo');
              }
              return false;
            },
    
            getViewport : function () {
              return {
                height : $viewport.height(),
                width : $viewport.width()
              };
            }
          };
    
      // Binds Controls, and exposes API
      return api.init();
    };
    Parallax Scroller

     用惯了jquery以后可能对美元符$有一点敬畏,实际上很多程序员喜欢用来定义变量名,就像我喜欢用下划线_一样

    js里的标识符,只能以下划线_,美元符$,以及字母开头,不能以数字开头来定义,JavaScript 语句和 JavaScript 变量都对大小写敏感。(y 和 Y 是不同的变量)

    css里面我也曾经犯过class名数字开头的错,样式怎么写都白写。。

    这里用$定义的变量因为都在Suli的Namespace里面,是不会和jquery冲突的。

    动起来

    五个大section各自的css背景图就是所谓“背景”,

    与这些背景反向运动的“前景”物品,在这里也被做成了和大背景图同等大小的png图片。

    也就是大部分都是透明的,空的。。

    这部分图片被作为section下一层div的背景。

    然后这个div再包含文字内容的其他div,一些不作特定运动的内容。

    控制错层部分的方法内设几个局部变量,大多被赋值为接收来的参数(selector, nav, center, imageHeight)

    this.selector = selector;
      this.offsets = [];
      this.viewport = window;//js全局对象
      this.nav = nav || false;
      this.center = center || false;
      this.imageHeight = imageHeight || 0;
      this.curIndex = 0;
    
      var self = this,
          $self = $(self.selector),
          $viewport = Suli.jQ.viewport,
          $nav,
          $navItem,

    这里的Suli.jQ.viewport,其实就是 $(window)

     Suli.jQ = {
        viewport : $(window),
        page : $('#page'),
        regionalHeader : $('header.regional'),
        regionalNav : $('nav.regional')
      };
    this.offsets = [];数组用来存放五个section的offset().top值;
    _setOffsets = function () {
            for (var i = 0, len = $self.length; i < len; i++) {
              var offset = $self.eq(i).offset().top;
              self.offsets.push(offset);
            }
          },

    关键部位,控制五个section和每个section下.innerScroll的运动方向以及速度:

    _onScroll = function () {
            var bgY = self.imageHeight,
                scrollTop = $viewport.scrollTop(),
                pageY = $self.height(),
                onCenter = Math.round(((pageY - bgY) + 1) / 2);
    
            for (var i = 0, len = $self.length; i < len; i++) {
              var $target = $self.eq(i),
                  $inner = $target.find('.innerScroll'),
                  offset = $target.offset().top,
                  bgTop = Math.round(scrollTop - offset),
                  bgLeft = (self.center) ? '50%' : '0';
              // Background Position
              $target.css({'backgroundPosition' : bgLeft + ' ' + (Math.round(bgTop * -0.1) + onCenter) + 'px'});
              //console.log(bgLeft,bgTop,onCenter)
              $inner.css({ 'backgroundPosition' : bgLeft + ' ' + (Math.round(bgTop * 0.1) + onCenter) + 'px'});

    显然,他们一个是乘以0.1,一个是乘以-0.1

    这里面用到另一个自定义工具集中的方法:

    /*
      ================================================
      Region Utils
      ================================================
    */
    Suli.utils = {
      stopWheel : function (dur) {
        Suli.jQ.viewport.bind('mousewheel', function (e) {
          e.preventDefault();
        });
        setTimeout(function () {
          Suli.jQ.viewport.unbind('mousewheel');
        }, dur);
      },
      reBind : function ($obj, e, fn, dur) {
        $obj.unbind(e, fn);
        if (e === 'click') { $obj.bind('click', function () { return false; })}
        setTimeout(function () {
          $obj.bind(e, fn);
        }, dur);
      }
    };

     js的核心部分就到此结束了,可是,可是,为什么.innerScroll和section的运动并没有被分开呢?

    是因为.innerScroll的样式应该也是要:

    .innerScroll {
          background-attachment: fixed;
          background-position: 50% 0;
          background-repeat: no-repeat;
        }

    否则 backgroundPosition 怎么会起作用呢!

    学习这个案例对我的js结构有很大提携,P. R. May先生把整个主js文件的结构规划得很清晰。

    UserAgent被收纳在device对象,

    Suli.device = {
      iPad : navigator.userAgent.match(/iPad/i) != null
    };

    Ajax的HTML写入被收纳在Suli.tmpl = {},

    对推特用户的登录管理,

    自定义工具集Suli.utils = {},

    视动差构造函数Suli.ParallaxScroller = function (selector, nav, center, imageHeight) {},

    响应式头部构造函数Suli.DynamicHeader = function (selector, scroll) {},

    轮播图构造函数Suli.SlideShow = function ($obj, data) {},

    动态分类显示Suli.Filter = function ($grid, $nav, data) {},

    列表的toogle事件Suli.ListToggle = function ($list, $nav) {},

    这里他用的live来委托事件:

    Suli.ListToggle = function ($list, $nav) {
      this.list = $list;
      this.nav = $nav;
      var self = this,
          api = {
            init : function () {
              self.nav.live('click', api.toggle);
            },
            toggle : function () {
              if ( ! $(this).parent().hasClass('current')) {
                self.list.toggleClass('list');
                $(this)
                  .parent()
                  .addClass('current')
                    .siblings()
                    .removeClass('current');
              }
              // Size Bg if Needed
              if ($('#pseudoBg').length) {
                $('#pseudoBg').height(Suli.jQ.page.outerHeight());
              }
              return false;
            }
          };
      return api.init();
    };

    也是分类显示(目测)Suli.GridViewer = function (data, options, selectors) },

    伪背景(大概是附加上去遮住原来的)Suli.PseudoBg = function(img, center, onCenter){},

    走马灯效果构造函数Suli.Carousel = function (data, pageLen, tmpl, selectors){},

    翻页功能构造函数Suli.ScrollPager = function (data, selectors, options) {},

    总初始(我喜欢写在最前面)Suli.init = function (region) {},

    首页下属有好几个效果以及首页单独的初始化:

    Suli.home = {};

    Suli.home.showLatest = function () {},

    Suli.home.introAnim = function () {},

    Suli.home.iPadHomePage = function (selector) {},

    Suli.home.init = function () {},

    页面Case Study:

    Suli.casestudy = {};
    Suli.casestudy.slideshows = [];
    Suli.casestudy.init = function () {},

    页面Services:

    Suli.services = {};
    Suli.services.init = function () {},

    页面Clients:

    Suli.clients = {};
    Suli.clients.init = function () {},

    页面People / Person:

    Suli.people = {};
    Suli.person = {};
    Suli.people.init = function () {},

    页面Careers:

    Suli.careers = {};
    Suli.careers.init = function () {},

    。。。。略。。。。

  • 相关阅读:
    NVelocity语法
    Linux C socket 编程之UDP
    MFC之Radio Button按钮学习 转载
    动态加载DLL
    JS中 判断一个整数是偶数还是奇数,并输出判断结果。
    JS中判断一个整数,属于哪个范围:大于0;小于0;等于0
    JS输入分数,判定成绩等级(if和switch两种写法)
    JS中根据输入的三个数字,判断是这一年的第几天。
    JS中开发一款软件,根据公式(身高108)*2=体重,可以有10斤左右的浮动。来观察测试者体重是否合适。
    php 多语言(UTF8编码)导出Excel、CSV乱码解决办法之导出UTF8编码的Excel、CSV
  • 原文地址:https://www.cnblogs.com/haimingpro/p/3810626.html
Copyright © 2020-2023  润新知