jQuery实现带滚动导航效果的全屏滚动相册实例

yizhihongxing
  1. 准备工作:
    本实例需要用到jQuery、fullpage.js和TweenMax.js,所以在开始之前要确保已经引入了这些库文件。
<head>
    <script src="//cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
    <script src="//cdn.bootcss.com/fullPage.js/2.9.7/jquery.fullPage.min.js"></script>
    <script src="//cdn.bootcss.com/gsap/1.20.4/TweenMax.min.js"></script>
    <link rel="stylesheet" href="//cdn.bootcss.com/fullPage.js/2.9.7/jquery.fullPage.min.css">
</head>
  1. 创建导航栏:
    创建一个包含所有页面锚点的导航栏,使用fullpage.js进行滚动切换。
<body>
    <div class="navbar">
        <ul>
            <li data-menuanchor="page1" class="active"><a href="#page1">Page 1</a></li>
            <li data-menuanchor="page2"><a href="#page2">Page 2</a></li>
            <li data-menuanchor="page3"><a href="#page3">Page 3</a></li>
            <li data-menuanchor="page4"><a href="#page4">Page 4</a></li>
            <li data-menuanchor="page5"><a href="#page5">Page 5</a></li>
        </ul>
    </div>
    <div id="fullpage">
        <div class="section page1" data-anchor="page1">Page 1</div>
        <div class="section page2" data-anchor="page2">Page 2</div>
        <div class="section page3" data-anchor="page3">Page 3</div>
        <div class="section page4" data-anchor="page4">Page 4</div>
        <div class="section page5" data-anchor="page5">Page 5</div>
    </div>
</body>

<script>
    $(document).ready(function() {
        $('#fullpage').fullpage({
            anchors: ['page1', 'page2', 'page3', 'page4', 'page5']
        });
    });
</script>
  1. 导航效果:
    添加样式和交互效果,实现导航菜单的滑动效果。使用TweenMax.js库为导航添加动画。
.navbar {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 80px;
    z-index: 1000;
    background-color: rgba(0,0,0,0.7);
    transition: background-color 0.5s ease;
}

.navbar.active {
    background-color: rgba(0,0,0,0.4);
}

.navbar ul {
    list-style-type: none;
    margin: 0;
    padding: 0;
    text-align: center;
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    width: 100%;
}

.navbar ul li {
    display: inline-block;
    margin-right: 30px;
    padding: 0 10px;
    cursor: pointer;
}

.navbar ul li.active {
    color: #fff;
    border-bottom: 2px solid #fff;
}

.navbar ul li a {
    color: #fff;
    text-decoration: none;
}

.navbar ul li a:hover {
    color: #ED6B64;
}

.navbar .line {
    position: absolute;
    bottom: 0;
    left: 50%;
    height: 3px;
    width: 50px;
    background-color: #ED6B64;
    transform: translateX(-50%);
}

.navbar ul li.active .line {
    width: 100%;
    transition: width 0.5s ease;
}

.navbar ul li:hover .line {
    width: 100%;
    transition: width 0.5s ease;
}

.active .line {
    width: 100%;
}
$(document).ready(function() {
    var $sections = $('.section');
    var $nav = $('.navbar ul');

    $(window).on('scroll', function() {
        var cur_pos = $(this).scrollTop();

        $sections.each(function() {
            var top = $(this).offset().top - 100;
            var bottom = top + $(this).outerHeight();

            if (cur_pos >= top && cur_pos <= bottom) {
                $nav.find('li').removeClass('active');
                $sections.removeClass('active');

                $(this).addClass('active');
                $nav.find('a[href="#'+$(this).attr('id')+'"]').parent().addClass('active');
            }
        });
    });

    $nav.on('click', 'a', function(e) {
        e.preventDefault();
        var id = $(this).attr('href');

        $('html, body').animate({
            scrollTop: $(id).offset().top - 50
        }, 500);
    });

    var $line = $('<div>', { class: 'line' });

    $line.appendTo($nav);

    var active_nav = $nav.find('li.active');

    $line.css({
        'left': active_nav.position().left,
        'width': active_nav.outerWidth()
    });

    $nav.find('li').hover(function() {
        $line.css({
            'left': $(this).position().left,
            'width': $(this).outerWidth()
        });
    }, function() {
        $line.css({
            'left': active_nav.position().left,
            'width': active_nav.outerWidth()
        });
    });

    TweenMax.to('.navbar', 0.5, {
        backgroundColor: 'rgba(0,0,0,0.4)'
    });

    TweenMax.staggerFrom('.navbar li', 0.5, {
        opacity: 0,
        y: 30,
        delay: 0.2,
        ease: Power3.easeOut
    }, 0.1);
});

至此,就完成了带滚动导航效果的全屏滚动相册实例,效果如下:https://codepen.io/miccjiang/pen/RmgMPv

示例1:可以通过修改css中的相关样式调整导航菜单的外观,例如背景颜色、字体颜色等。示例代码如下:

.navbar {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 80px;
    z-index: 1000;
    /* 修改 */
    background-color: rgba(255,255,255,0.7);
    transition: background-color 0.5s ease;
}

.navbar.active {
    /* 修改 */
    background-color: rgba(255,255,255,0.4);
}

.navbar ul li a {
    /* 修改 */
    color: #ED6B64;
    text-decoration: none;
}

.navbar ul li a:hover {
    /* 修改 */
    color: #333;
}

示例2:可以在滚动到某个页面时添加不同的动画效果。例如,在滚动到第2页时,页面中的图片逐渐从下方移入;在滚动到第3页时,页面中的文字逐渐透明。示例代码如下:

$(window).on('scroll', function() {
    var cur_pos = $(this).scrollTop();

    $sections.each(function() {
        var top = $(this).offset().top - 100;
        var bottom = top + $(this).outerHeight();

        if (cur_pos >= top && cur_pos <= bottom) {
            $nav.find('li').removeClass('active');
            $sections.removeClass('active');

            $(this).addClass('active');
            $nav.find('a[href="#'+$(this).attr('id')+'"]').parent().addClass('active');

            /* 修改 */
            if ($(this).hasClass('page2')) {
                TweenMax.staggerFrom('.page2 img', 1, {
                    opacity: 0,
                    y: 30,
                    ease: Power3.easeOut
                }, 0.1);   
            } else if ($(this).hasClass('page3')) {
                TweenMax.staggerTo('.page3 h1, .page3 p', 1, {
                    opacity: 0,
                    ease: Power3.easeOut
                }, 0.1);               
            }
        }
    });
});

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jQuery实现带滚动导航效果的全屏滚动相册实例 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 移动开发之自适应手机屏幕宽度

    移动开发之自适应手机屏幕宽度 在移动开发中,适配不同屏幕尺寸是一个常见的问题。其中,自适应布局是一种经典的解决方案,可以适配不同大小的设备,提高用户体验。下面是自适应手机屏幕宽度的完整攻略: 1. 使用viewport设置屏幕宽度 Viewport是指“视窗”,指的是​​用户实际看到的网页区域。在移动设备上,viewport的宽度与屏幕的宽度有关系。因此,我…

    css 2023年6月10日
    00
  • CSS实现DIV居中的三种方法

    下面来讲解“CSS实现DIV居中的三种方法”的完整攻略。 1. 水平居中 方法一:使用text-align 让父元素的text-align属性设置为center,子元素则设置display:inline-block即可实现水平居中。 示例代码如下: <style> .parent{ text-align:center; } .child{ dis…

    css 2023年6月10日
    00
  • HTML5+CSS3网页加载进度条的实现,下载进度条的代码实例

    嗨,欢迎来到本站!以下是关于HTML5+CSS3网页加载进度条的实现,下载进度条的代码实例的完整攻略: 前置知识 在实现网页加载进度条的过程中,需要一些基础知识。以下是一些你需要掌握的前置知识: HTML5:HTML5是HTML的第5个版本,是一种用于建立和呈现Web内容的标准技术。 CSS3:CSS3是CSS的第3个版本,是一种用于美化Web页面的标准技术…

    css 2023年6月11日
    00
  • HTML+CSS实现动态背景登录页面

    要实现动态背景登录页面,可以使用HTML+CSS语言来完成。下面是实现过程的详细说明: 步骤 1:准备HTML文件 在HTML文件中,需要包含以下内容: 一个标题,通常是网站的名称 一个表单,用于输入用户名和密码 一个登录按钮 <!DOCTYPE html> <html> <head> <title>网站名称&…

    css 2023年6月9日
    00
  • div盒子究竟占多大面积实际的宽度高度如何计算

    要完整讲解“div盒子究竟占多大面积实际的宽度高度如何计算”,我们需要了解以下几个方面: 盒子模型的概念 内容区、内边距、边框、外边距等属性所占的宽度和高度 实际计算宽度和高度时的注意事项 首先,盒子模型是CSS布局中的一个概念,即一个元素在页面上占据的空间可以看作一个盒子,该盒子由内容区、内边距、边框和外边距等组成。 具体而言,内容区指的是盒子中呈现内容的…

    css 2023年6月10日
    00
  • CSS 字体单位em简介

    CSS 字体单位em简介 在CSS中,我们常使用像素(px)作为字体大小的单位。但是,随着Web的不断发展,越来越多的网站采用了响应式设计,而px固定的大小不符合响应式设计所需,因此em成为了更好的选择。 em是什么? em是一个相对单位,根据其父元素的字体大小而定。一般而言,1em等于父元素的字体大小。比如,如果一个段落的字体大小被设置为1.2em,那么字…

    css 2023年6月9日
    00
  • CSS3中的display:grid,网格布局介绍

    关于 CSS3 中的 display: grid,首先需要了解的是,它是用来进行网格布局的。网格布局是指将一个区域分割成若干个小区域,然后按照一定规则来排列和布局这些小区域。 网格布局的基本概念 在使用 display: grid 布局时,我们需要对以下几个概念进行了解: 网格容器(Grid Container):一个元素如果设置了 display: gri…

    css 2023年6月9日
    00
  • CSS list-style修改列表属性控制li标签样式

    下面是关于“CSS list-style修改列表属性控制li标签样式”的完整攻略。 1. 简介 在网页开发中,常常需要使用到列表。而对于列表,除了默认的样式之外,我们还可以通过CSS的list-style属性来修改它的样式。list-style属性是一个缩写属性,可以同时设置列表的样式、位置和图案类型。 具体而言,list-style属性由3个单独的属性组成…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部