菜单背景在滚动时更改颜色

Posted

技术标签:

【中文标题】菜单背景在滚动时更改颜色【英文标题】:menu background change color on scroll 【发布时间】:2014-06-30 03:23:02 【问题描述】:

我想要做的是当用户到达网站的下一部分时,我的菜单背景从透明变为浅灰色。我已经在高处和低处搜索了一个脚本,并在这里尝试了多个,但似乎根本没有任何效果。

任何帮助将不胜感激。

谢谢

HTML

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Upbeat Designs | Freelance Web Design</title>

        <link rel="stylesheet" href="style.css" type="text/css">
        <link href='http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
    </head>

    <script type="text/javascript">
$(window).scroll(function()     
    var scroll = $(window).scrollTop();

    if (scroll >= 500) 
        $(".header").addClass("scrolling");
     else 
        $(".header").removeClass("scrolling");
    
);
        </script>

    <body>
        <!-- header area -->
        <div class="header">
            <div id="logo">
                <a href="#"><img src="images/logo.png" /></a>
            </div>
            <nav>
                <input id="nav" type="checkbox" />
                <label for="nav">
                    <strong>Menu</strong>
                    <b><i></i><i></i><i></i></b>
                </label>
                <menu>
                    <li><a href="#">Home</a></li>
                    <li><a href="#">About</a></li>
                    <li><a href="#">Services</a></li>
                    <li><a href="#">Portfolio</a></li>
                    <li><a href="#">Contact</a></li>
                </menu>
            </nav>
        </div>
        <!-- end header area -->

        <div id="container-1">
        <!-- landing page -->
            <div class="hero">
            <div class="page">
                <h1>I'm <span style="color:#fff;font-weight:600">Trisha</span>, a web designer &amp; developer from Illinois.</h1>
                <p>I believe every single detail matters. My goal is to perfect the web one pixel at a time, and provide solutions through thoughtful ideas that translate into designs that last.</p>
            <div class="next">
                <a href="#">Let's Go.</a>
            </div>
            </div>
        </div>


        <!-- end landing page -->
        <!-- about page -->
            <div class="about">
            <div class="page">
            <h1>About Me</h1>
            <p>About Me Goes here.</p>
            </div>
        </div></div>


    </body>
</html>

CSS

    * 
  margin: 0;
  padding: 0;

html, body 
    height: 100%;
-webkit-font-smoothing: antialiased;


body 
  background: url(images/home-bg.jpg) no-repeat center center fixed;
  background-size:cover;
    color: #fff;
    font: 300 1em "Open Sans", Helvetica, Arial, sans-serif;
    display: table;
    margin: 0 auto;


/*----- NAVIGATION -----*/
#logo 
    position: absolute;
    top: 20px;
    left: 20px;

.header 
    display: block;
    position: fixed;
    right: 0;
    left: 0;
    margin: 0;
    width: 100%;
    padding: 30px;
    background-color:transparent;
    box-sizing: border-box;

.header.scrolling 
    background: #ccc;

#logo img 
    width: 75%;

nav input 
  display: none;

nav label 
  position: absolute;
  top: 50px;
  right: 10px;
  top: 10px;
  z-index: 999;
  cursor: pointer;

nav label strong 
  padding: 0 10px;
  width: 40px;
  height: 40px;
  line-height: 40px!important;
  font: 600 1em "Open Sans", helvetica, sans-serif;
  color: #fff;
  text-transform: uppercase;
  position: absolute;
  right: 40px;
  top: 0px;
  transition: color 250ms ease;
  -webkit-transition: color 250ms ease;

nav label b 
  width: 40px;
  height: 40px;
  display: block;
  position: relative;
  right: 0;
  top: 0;
  cursor: pointer;
  transition: background 500ms ease;
  -webkit-transition: background 500ms ease;

nav label b i 
  display: block;
  background: #fff;
  width: 24px;
  height: 4px;
  position: absolute;
  left: 8px;
  top: 11px;

  transform-origin: 20px 4px;
  -webkit-transform-origin: 20px 4px;
  transition: transform 500ms ease, opacity 500ms ease;
  -webkit-transition: transform 500ms ease, opacity 500ms ease;

nav label b i:nth-child(2) 
  top: 18px;

nav label b i:nth-child(3) 
  transform-origin: 26px 4px;
  -webkit-transform-origin: 26px 4px;
  top: 25px;

nav menu 
  background: none;
  width: 150px;
  height: 50%;
  opacity: 0;
  transition: opacity 500ms ease;
  -webkit-transition: opacity 500ms ease;
  position: absolute;
  z-index: 998;
  top: 0;
  right: 0;

nav menu li 
  margin: 0;
  list-style: none;
  width: 100%;

nav menu li:first-child 
  margin-top: 60px;

nav menu li:first-child a 
  border-top: rgba(255, 255, 255, 0.2) 1px solid;

nav menu li a 
  padding: 20px;
  font: 100 1em "Open Sans", helvetica, sans-serif;
  text-transform: uppercase;
  text-decoration: none;
  text-align: right;
  color: #fff;
  display: block;

nav menu li a:hover 
  background: rgba(0, 0, 0, 0.1);

nav #nav:checked ~ label strong 
  color: rgba(255, 255, 255, 0.25);

nav #nav:checked ~ label b 


nav #nav:checked ~ label b i:nth-child(1) 
  transform: rotate(45deg) translate(6px, 11px);
  -webkit-transform: rotate(45deg) translate(6px, 11px);
  transition: all 500ms ease;
  -webkit-transition: all 500ms ease;

nav #nav:checked ~ label b i:nth-child(2) 
  opacity: 0;

nav #nav:checked ~ label b i:nth-child(3) 
  transform: rotate(-45deg) translate(10px, -14px);
  -webkit-transform: rotate(-45deg) translate(10px, -14px);
    transition: all 500ms ease;
  -webkit-transition: all 500ms ease;

nav #nav:checked ~ menu 
  opacity: 1;


/*------------------------*/

#container-1 
    width: 100%;
    height: 100%;
    display: table-cell;
    vertical-align: baseline;

.hero 
  margin: auto;
  height: 100%;
  width: 65%;
  padding: 20% 0 0;

.hero h1 
    font-size: 3em;
    font-weight: 300;
    text-align: center;
    color: #ddd;

.hero p 
    color: #ddd;
    font-size: 1.5em;
    font-weight: 300;
    text-align: center;
    margin-top: 20px;
    padding-top: 20px;
    border-top: 1px solid rgba(255,255,255,0.2);

.next 
    margin: 80px auto;
    width: 150px;
    height: auto;
    border: 2px solid rgba(255,255,255,0.2);
        transition: background 500ms ease;
    -webkit-transition: background 500ms ease;
    text-align: center;

.next:hover 
    background: rgba(255,255,255,0.5);
    border: 2px solid rgba(255,255,255,0.0);
    transition: background 500ms ease;
    -webkit-transition: background 500ms ease;

.next a 
    text-align: center;
    line-height: 3em;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    color: #fff;
    text-decoration: none;

.about 
    background: #fff;   
    width: 100%;
    height: 100%;

.about h1 
    font-size: 3em;
    font-weight: 300;
    text-align: left;
    color: #777;

.about p 
    color: #777;
    font-size: 1.5em;
    font-weight: 300;
    text-align: left;
    margin-top: 20px;
    padding: 20px;
    border-top: 1px solid rgba(255,255,255,0.2);


/*----- MEDIA QUERIES -----*/
@media only screen and (max-width: 480px) 
    .hero 
        width: 80%;
        margin-top: 20%;
    

@media only screen and (max-width: 768px) 
    .hero 
        width: 80%;
    

【问题讨论】:

尝试了哪些代码来使淡入淡出工作?而且“我只是不想找到它们。” - 嗯? @JayBlanchard 我的意思是我已经查看了几十个试图让这个工作的脚本......我不想回去找到它们。比如这个:***.com/questions/8755887/…,我把#menu换成.header,什么也没发生。 您可以发布您尝试过的脚本,而不仅仅是链接到其他没有帮助的脚本吗? 啊,所以您在寻找脚本或插件?如果是这样,那可能会导致您的问题被关闭。 谢谢杰,下次我会记住的。我的目的不是仅仅要求一个脚本..而是寻求帮助。 @Justin,我已将此添加到我的代码中,但它仍然无法正常工作。 upbeatdesigns.net/ud 有新代码。 【参考方案1】:

这是一个fiddle,介绍了如何在某些滚动位置向元素添加类(一种基本方法)。显然,您可以将其从颜色调整为不透明度或任何其他内容。请注意,这需要 jquery。

但是,您无法完成这项工作的原因是您的 CSS 设置方式。您的标题的内容inside 的位置为fixed,而不是.header 本身就是应该具有position: fixed 的元素。里面的内容不应该是固定的。

【讨论】:

请再次检查代码,我第一次更改时没有通过ftp上传,但现在已修复。 哇.. 不敢相信我没想到。这是漫长的一天。感谢您的帮助,它成功了。我已经在脚本中添加了其他类,所以我可以改变的不仅仅是 .header 类!【参考方案2】:

我认为满足您的要求https://github.com/Prinzhorn/skrollr 是要走的路。它是一个易于实现的库,依赖于 css 转换,不需要 jquery

它可以处理颜色、视差、动画等等。

【讨论】:

【参考方案3】:

将滚动条绑定到窗口是个坏主意。

如果您想触发网站每个部分的更改,请查看 jquery waypoints

http://imakewebthings.com/jquery-waypoints/

    $('.section').waypoint(handler: function() 
            $('.menu').css('background', '#ff3366');
        ,
        offset: '50%'
    );

希望这会有所帮助。

【讨论】:

以上是关于菜单背景在滚动时更改颜色的主要内容,如果未能解决你的问题,请参考以下文章

PrimeReact:悬停时更改菜单栏项目的背景颜色

Bootstrap 3下拉菜单在子菜单焦点上更改背景

如何更改操作栏中下拉菜单的背景颜色

Bootstrap:更改背景颜色下拉菜单

Android:按下菜单项时的背景颜色

仅通过滚动更改引用每个菜单项的背景图像