固定菜单页面滚动效果

在一个单页面设置一个主菜单,当页面滚动时主菜单位置固定在页面窗口中不动,或左或右,或上或下。当单击菜单项时,页面滚动到菜单对应的内容区,当页面滚动到预定内容位置时,对应的菜单项变为当前选中样式。

此效果可以应用在一些内容比较长的单页设计,本文将介绍使用JjQuery和css来实现这一效果,demo中分别有菜单居左、居右及底部效果,点击demo看效果:

HTML

本例html来自本站文章:ScrollTo:平滑滚动到页面指定位置中的DEMO,我们在页面中的#main内放置一个主菜单ul.nav,并对应每个菜单项的内容区,我们会发现内容区的id对应菜单项的class,接下来你会发现它的作用。

 <div id="main">         <ul class="nav">            <li><a class="pro">产品展示</a></li>            <li><a class="news">新闻中心</a></li>            <li><a class="ser">服务支持</a></li>            <li><a class="con">联系我们</a></li>            <li><a class="job">人才招聘</a></li>     </ul>      <div id="pro" class="box">         <h3>产品展示</h3>         ...      </div>      <div id="news" class="box">         <h3>新闻中心</h3>         ...      </div>      <div id="ser" class="box">         <h3>服务支持</h3>         ...      </div>      <div id="con" class="box">         <h3>联系我们</h3>         ...      </div>      <div id="job" class="box">         <h3>人才招聘</h3>         ...      </div> </div> 

CSS

使用CSS固定菜单,以及设置菜单样式,和内容区。

 .nav{width:160px; position:fixed; margin-left:-170px; top:20%; z-index:1999;  background:#f0f0f0; border: 1px solid #ccc;-webkit-border-radius: 6px; -moz-border-radius: 6px;border-radius: 6px;-webkit-box-shadow:  0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);} .nav li{height:36px; line-height:36px; border-bottom:1px solid #d3d3d3;  text-align:center; cursor:pointer} .nav li:last-child{border-bottom:none} .nav li a{display:block; width:98%; height:34px;font-size:16px;} .nav li a:hover{background:#f9f9f9; text-decoration:none} .nav li a.cur{background:#ffc} .box{height:600px; margin: 0 10px} 

上面的代码使用position:fixed将菜单位置固定在内容区的左侧:demo1

jQuery

本例基于jQuery,所以老惯例,先载入jquery库,然后写代码:

 $(function(){     $(".nav li a").click(function() {         var el = $(this).attr(‘class‘);          $(‘html, body‘).animate({              scrollTop: $("#"+el).offset().top          }, 300);         //切换菜单样式         $(this).addClass("cur").parent().siblings().find("a").removeClass("cur");      }); }); 

当单击菜单项时,使用jQuery自定义动画函数animate(),将页面对应的区域(id对应了菜单项的class),滚动到浏览器顶端,并且将菜单项的样式切换为当前选中状态。

如果你喜欢用不同的滚动效果,请参照本站文章:jQuery Easing 动画效果扩展

其实到这里,已经实现了固定菜单,和点击菜单滚动到指定内容位置的效果,但是有一点,当我们不点击菜单,而是滚动页面时,页面到达了菜单项对应的位置,我们需要菜单项也做出对应的反应,将对应的菜单项设置为当前选中项,这样就可以告诉用户,您正在浏览的对应的是页面哪个节点的内容。

我们先获取内容区每个菜单对应的节点与页面顶部的偏移量,然后当页面滚动scroll时,获取页面滚动条的便宜距离scroH,然后将这两个值比较,设置对应的菜单项为选中状态。

 $(function(){     ...     var pro_top = $("#pro").offset().top; //距页顶偏移量     var news_top = $("#news").offset().top;     var ser_top = $("#ser").offset().top;     var con_top = $("#con").offset().top;     var job_top = $("#job").offset().top;      $(window).scroll(function(){//滚动页面         var scroH = $(this).scrollTop(); //滚动条位置         if(scroH>=job_top){             set_cur(".job");//设置状态         }else if(scroH>=con_top){             set_cur(".con");         }else if(scroH>=ser_top){             set_cur(".ser");         }else if(scroH>=news_top){             set_cur(".news");         }else if(scroH>=pro_top){             set_cur(".pro");         }     });     ... }); 

自定义函数set_cur()用于设置当前菜单状态:

 function set_cur(n){     if($(".nav a").hasClass("cur")){         $(".nav a").removeClass("cur");     }     $(".nav a"+n).addClass("cur"); } 

好了,现在滚动页面切换样式也实现了,但是还有一个问题,当浏览器窗口大小变化时,菜单位置也应该一起变化,浏览器窗口宽度大于内容区和主菜单宽度时,保持主菜单一直依靠在内容区左侧。

 $(window).resize(function(){//窗口大小变化   navpos(); }); //根据宽度设置样式 function navpos(){     var offset = $("#main").offset().left;     var nav_w = $(".nav").outerWidth();     var left = offset-nav_w;          if(left>10){         $(".nav").css("margin-left","-170px");     }else{         $(".nav").css("margin-left",-(160+left)+"px");     } } 

当然,我们也可以在页面加载完成时也调用navpos(),初始化菜单位置。

 $(function(){     navpos();     ... }); 
时间: 2024-10-28 21:31:05

固定菜单页面滚动效果的相关文章

Page Scroll Effects - 简单的页面滚动效果

Codyhouse 收集了一组页面滚动效果,就是目前大家很常见的用户在浏览网页的时候.一些效果虽然极端,但如果你的目标是创建一个身临其境的用户体验,他们是非常有用的.所有的动画都使用 Velocity.js 创建. 在线演示      源码下载 您可能感兴趣的相关文章 网站开发中很有用的 jQuery 效果[附源码] 分享35个让人惊讶的 CSS3 动画效果演示 十分惊艳的8个 HTML5 & JavaScript 特效 Web 开发中很实用的10个效果[源码下载] 12款经典的白富美型 jQu

HTML+CSS页面滚动效果处理

HTML+CSS代码如下: <!doctype html> <html> <head> <meta charset="utf-8"> <title>index</title> <style type="text/css"> body,ul,li{ margin:0px; padding:0px;} body{ background:url(img/bg.jpg) center; }

animate.css配合wow.min.js实现各种页面滚动效果

有的页面在向下滚动的时候,有些元素会产生细小的动画效果.虽然动画比较小,但却能吸引你的注意.比如刚刚发布的 iPhone 6 的页面(查看).如果你希望你的页面也更加有趣,那么你可以试试 WOW.js. WOW.js 依赖 animate.css,所以它支持 animate.css 多达 60 多种的动画效果,能满足您的各种需求. html中使用方法: <div class="row wow fadeInUp" data-wow-duration="1s" d

客服菜单上下滚动效果实现

这是html结构 <!-- 客服 --> <div class="service" id="service"> <img src="./images/service.png"> <a onclick="onlineService('https://kf1.learnsaas.com/chat/chatClient/chatbox.jsp?companyID=967348&configID

页面滚动事件的使用

在现在更加追加页面加载速度和用户体验的情况下,页面的滚动事件使用的越来越多.通常我们使用滚动事件主要做的事情主要有: ajax异步加载,加快页面首次加载的速度 懒加载(或延迟加载):先把HTML元素放到textarea标签中,或把img的链接先放到一个字段里,页面滚动到某个位置时才进行开始加载 顶部导航或侧边导航的焦点跟踪 侧边数字导航的跟踪(例如百度经验) “回到顶部”功能 这两天做了一个demo,大家可以参考一下:页面滚动效果 上图中指出了用滚动事件实现的功能,不过demo中没有实现异步加载

基于html5整屏切换IDO智能手表页面滚动代码

之前为大大家介绍了一款jquery实现的整屏切换特效.今天分享一款IDO智能手表页面滚动html5代码.这是一款基于jQuery+HTML5实现的页面滚动效果代码.效果图如下: 在线预览   源码下载 部分代码: <div class="main" id="main"> <div class="page page1"> <div class="head-pic"> <div style

移动端web页面滚动不流畅,卡顿闪烁解决方案

1.ios端的-webkit-overflow-scrolling属性可控制页面滚动效果,设置如下实现惯性滚动和弹性效果: -webkit-overflow-scrolling: touch 2.position属性导致的页面滚动不流畅问题: <div style="overflow-x: hidden; overflow-y: auto; position: absolute; height: 200px;"> <div style="position:

当滚动页面到一定程度时,页顶菜单浮动固定在页面顶部

存粹是笔记呵呵 代码一: 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http

页面滚动显示或隐藏元素Headroom.js插件帮助你实现滚动效果

Headroom.js 是什么? Headroom.js 是一个轻量级.高性能的JS小工具(不依赖任何工具库!),它能在页面滚动时做出响应.此页面顶部的导航条就是一个鲜活的案例,当页面向下滚动时,导航条消失,当页面向上滚动时,导航条就出现了. Headroom.js 有什么用? 固定页头(导航条)可以方便用户在各个页面之间切换.但是这也会带来些问题…本文原创博客地址:http://www.cnblogs.com/unofficial官网地址:www.pushself.com) 大屏幕一般都是宽度