React实现顶部固定滑动式导航栏(导航条下拉一定像素时显示原导航栏样式)

摘要

  基于react的框架开发一个顶部固定滑动式的酷炫导航栏,当导航栏置顶时,导航栏沉浸在背景图片里;当鼠标滑动滚轮时,导航栏固定滑动并展示下拉样式。

HTML部分

  相关技术栈:reactantdreact-router。详细的技术栈应用请参考官方文档的使用说明。

* 展示主页App.jsx组件代码

import React from ‘react‘;
import ‘./App.css‘;
import { Link, Route } from ‘react-router-dom‘;
import { Layout } from ‘antd‘;
//引入导航栏相对应的组件
import Home from ‘./components/Home/Home‘;
import CoreTechnology from ‘./components/Technology/Technology‘;
import Case from ‘./components/Case/Case‘;
import About from ‘./components/About/About‘;
import Join from ‘./components/Join/Join‘;

const { Content } = Layout;

class App extends React.Component {
//在componentDidMount生命周期中添加window的handleScroll滑动监听事件
componentDidMount() {
  window.addEventListener(‘scroll‘, this.handleScroll);
}
//定义handleScroll事件函数
handleScroll =(e)=>{
  var header = document.getElementById(‘header‘); //定义一个dom节点为‘header‘的header变量
    if(window.pageYOffset >= 80){  //if语句判断window页面Y方向的位移是否大于或者等于导航栏的height像素值
      header.classList.add(‘header_bg‘);  //当Y方向位移大于80px时,定义的变量增加一个新的样式‘header_bg‘
    } else {
      header.classList.remove(‘header_bg‘); //否则就移除‘header_bg‘样式
    }
}

  render() {
    return (
      <div className="page" id="page">
        <Layout>
          <div className="header" id="header"> //导航栏div
            <div className="brand">
              <Link to="/">
                <img src={require("./img/[email protected]")} alt="大可logo" width="" height="32"/>
              </Link>
            </div>
            <div className="nav">
              <ul>
                <li>
                  <Link to="/technology">
                    <img src={require("./img/dkgw_hxjs.png")} alt="核心技术" width="32" height="32"/>
                    核心技术
                  </Link>
                </li>
                <li>
                  <Link to="/case">
                    <img src={require("./img/dkgw_hyal.png")} alt="行业案例" width="32" height="32"/>
                    行业案例
                  </Link>
                </li>
                <li>
                  <Link to="/about">
                    <img src={require("./img/dkgw_gywm.png")} alt="关于DUCK" width="32" height="32"/>
                    关于DUCK
                  </Link>
                </li>
                <li>
                  <Link to="/join">
                    <img src={require("./img/dkgw_jrwm.png")} alt="加入我们" width="32" height="32"/>
                    加入我们
                  </Link>
                </li>
              </ul>
            </div>
          </div>

          <Content className="content" id="content">
            <Route path="/" exact component={ Home }/>
            <Route path="/technology" component={ CoreTechnology }/>
            <Route path="/case" component={ Case }/>
            <Route path="/about" component={ About }/>
            <Route path="/join" component={ Join }/>
          </Content>
        </Layout>
      </div>
    );
  }
}

export default App;

CSS部分

  为了让导航栏置顶时悬浮在背景图上,需要给导航啦设置特定的css样式。

    position: fixed;
    box-sizing: border-box;
    display: flex;
    justify-content: space-between;
    align-items: center;
    transition: 0.5s;
    z-index: 1000;

* 主页App.css样式代码

@import ‘~antd/dist/antd.css‘; //引入antd样式
@import url(‘https://fonts.googleapis.com/css?family=Roboto‘); //引入谷歌字体样式

/* {通用样式开始} */
* {
    margin: 0;
    padding: 0;
    font-family: Arial, Helvetica, sans-serif;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}
/* {通用样式结束} */

/* {导航栏基础样式} */
.header
{
    position: fixed;
    top: 0;
    left: 0;
    width: 100vw;
    height: 5rem;
    padding: 0 10vw;
    box-sizing: border-box;
    display: flex;
    justify-content: space-between;
    align-items: center;
    transition: 0.5s;
    z-index: 1000;
}
{/*{导航栏新样式}*/}
.header.header_bg
{
    background: #607d8b;
}

.nav ul
{
    margin: 0;
    padding: 0;
    display: flex;
}

.nav ul li
{
    list-style: none;
}

.nav ul li a
{
    color: #fff;
    padding: 0 20px;
    font-size: 1.1em;
    text-decoration: none;
    font-weight: bold;
}

.brand a
{
    color: #fff;
    font-size: 1.1em;
    text-decoration: none;
    font-weight: bold;
}

基本效果图

导航栏置顶时:

导航栏下滑一定像素时:

最后

  以上就是小编在实战开发中的一个小分享,如有任何说的不对的地方,欢迎大家对我指指点点!

原文地址:https://www.cnblogs.com/BlueBerryCode/p/11745825.html

时间: 2024-11-09 04:04:34

React实现顶部固定滑动式导航栏(导航条下拉一定像素时显示原导航栏样式)的相关文章

响应式WEB设计:将导航菜单转换成下拉菜单以适应小屏幕设备

移动互联网时代的到来,使得我们在进行页面设计与开发时,应当根据用户行为以及设备环境(系统平台.屏幕尺寸)进行相应的响应和调整,这个理念也叫响应式WEB设计.今天我将给大家讲解当屏幕尺寸变小时,将横向菜单转换成下拉菜单的效果. 本文使用了HTML5标签以及CSS3技术,您在查看demo时需要您的浏览器支持HTML5和CSS3,建议使用Chrome,Firefox或者IE9等现代浏览器. HTML <nav> <ul> <li><a href="/"

Web前端开发实战6:CSS实现导航菜单结合二级下拉式菜单的简单变换

前面几篇博文都在讲导航菜单和二级下拉式菜单,其实有很多方法都可以实现的,具体的情况还要视情况而定. 在后面学习到jQuery框架之后,会有更丰富的动画效果,由于在学习Ajax和jQuery的初步阶段,对于很多的复杂的导 航菜单和二级下拉式菜单没法做,但是学习了CSS和JS还是能实现一些简单的变换的.这篇博文就来说说用CSS实现 导航菜单结合二级下拉式菜单的两个简单变换吧. 首先还是在前面博文的基础上加以实现,其实只用HTML和CSS还是可以做出不错的效果,但是相较于JS和 jQuery来说就有很

UIScrollView UITableView 上拉隐藏导航栏和tabbar 下拉显示导航栏和tabbar

//UIScrollView  UITableView 上拉隐藏导航栏和tabbar 下拉显示导航栏和tabbar-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ CGPoint translation = [scrollView.panGestureRecognizer translationInView:scrollView.superview];    if

listview下拉到一定位置显示回到顶部按钮

布局文件: <RelativeLayout android:id="@+id/ll_list" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@+id/ll_bottom" android:layout_below="@id/ll_top" > <

很酷的导航条下拉效果

<style type="text/css"><!--.p9{ font-family: "宋体"; font-size: 9pt; }body { font-family: "宋体"; font-size: 9pt; margin-top: 0px; margin-left: 0px; margin-right: 0px}UNKNOWN { TEXT-DECORATION: none}A:visited { TEXT-DECO

Bootstrap历练实例:带有下拉菜单的标签和胶囊导航

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Bootstrap历练实例:带有下拉菜单的标签和胶囊导航</title> <meta charset="utf-8" /> <meta name=&quo

QPushButton下拉式菜单(是否取消下拉三角,是否check)

给QPushButton添加菜单的示例,前面已经有了三种方式: Qt学习之给QPushButton添加菜单ActionsContextMenu方法 Qt学习之给QPushButton添加菜单CustomContextMenu方法 Qt学习之给QPushButton添加菜单DefaultContextMenu方法 今天再提供一种方式,就是给QPushButton添加下拉式菜单.类似于Combobox一样.前面三种方式实现的都是光标在哪个位置,菜单就在哪里显示.而下拉式菜单只在按钮的下方显示,同时会

各式导航栏和下拉菜单

1,最简单的下拉菜单 文件组成: 效果图: HTML代码: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name="Author" content="&

NAV导航栏———下拉菜单

利用CSS实现导航栏菜单—下拉菜单. 首先给出HTML下拉菜单布局格式: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Stylin' with CSS - Figure 6.5 Drop-Down Menus</title> <link rel="stylesheet" type="text/css&