React + Vite 实现一个音乐网站(menu篇)

news/2024/5/19 7:59:39/文章来源:https://blog.csdn.net/qq_44417818/article/details/122693100

众所周知,每个网站都有菜单…

1.建立component文件夹

内部创建menu文件夹,文件夹内创建index.jsx和index.scss
目录结构如下
在这里插入图片描述

2.代码的编写

1.解决思路:首先我们肯定是要搭建页面的,我将meun分为两部分一步份为logo,一部分为item
在这里插入图片描述
所以我们只需要一个大盒子内嵌套两个小盒子然后用flex布局确定位置就行,非常简单
那么如果只是简单的弄个样子肯定是不行的,作为一个优秀的前端应该去完善网站的交互。那么我这边是用hover来实现鼠标滑动到一个item就会显现下划线。这样用户既能知道当前是哪个item还能让页面更加美观。

index.jsx

import './index.scss'
import Icon from '../../assest/icon'
import {Link, BrowserRouter as Router, NavLink} from 'react-router-dom'
import {useState} from 'react'//至于这里引入的Icon是因为我想自己封装icon组件function Meun() {//改变菜单const MeunChange=(index)=>{setMeunIndex(index)}//meunIndexconst [meunIndex,setMeunIndex]=useState(0)return (<div className="allMeun"><div className="part-logo"><img src="../image/logo.png" alt="" /></div><div className="part-meunList"><NavLink to="/" className='meun'><div onClick={()=>MeunChange(0)}>Home</div></NavLink><NavLink to="/about" className='meun'><div onClick={()=>MeunChange(1)}>About Us</div></NavLink><NavLink to="/concert" className='meun'><div onClick={()=>MeunChange(1)}>Concert</div></NavLink><NavLink to="/album" className='meun'><div onClick={()=>MeunChange(1)}>Album</div></NavLink><NavLink to="/pages" className='meun'><div onClick={()=>MeunChange(1)}>Pages</div></NavLink><NavLink to="/news" className='meun'><div onClick={()=>MeunChange(1)}>News</div></NavLink><NavLink to="/contact" className='meun other'><div onClick={()=>MeunChange(1)}>Contact</div></NavLink><div className="search">{/* <img src="" alt="" /> */}<Icon className="icon-sousuo"></Icon></div></div></div>)
}export default Meun

上述代码中我渲染了每个item并绑定了事件处理函数来执行页面的切换,通过改变meunIndex来进行item的切换显示,这里用了react-router-dom中的NavLink标签。这个标签可以将当前显示的路由页面加上active的css属性,避免属性时meunIndex质为0造成下划线指向错误的情况

index.scss

.allMeun{width: 58.75rem;// width: 100%;display: flex;justify-content: space-between;align-items: center;margin: 0 auto;color: #dce3e6;margin-top: 2rem;font-size: 0.8rem;position: absolute;top: 0;// padding: 0 5rem;left: 50%;transform: translateX(-50%);.part-logo{}.part-meunList{display: flex;a{text-decoration: none;color: #dce3e6;}.meun{margin-right: 2.5rem;position: relative;cursor: pointer;&.other{margin-right: 1rem;}&::after,&::before{content: '';position: absolute;width: 0;opacity: 0;}&:hover,&.active{&::after,&::before{content: '';position: absolute;width: 70%;height: 0.1rem;opacity: 1;transition: opacity,width 0.38s ease-in-out;}&::after{bottom: -0.5rem;left: -0.3rem;background-color: #da2bb5;}&::before{bottom: -0.3rem;right: -0.3rem;background-color: #416088;}}}}
}

上面为menu的样式文件,一目了然

3.将meun渲染到页面上

由于我们的meun菜单会运用到所有页面,所以我们不能将其放入routerjs内,需要单独将其拎出来
找到根目录的index.jsx文件

import ReactDOM from 'react-dom';
import MyRouter from './router/index.jsx';
import {useCallback, useEffect, useState,useLayoutEffect} from 'react'
//引入meun
import Meun from './components/Meun/index.jsx';function App(){return(<div>//挂载meun<Meun></Meun><MyRouter></MyRouter></div>)
}ReactDOM.render(<Router><App/></Router>,document.getElementById('app')
)

4.icon的封装

meun部分的话差不多就这些了,下面说下对于icon的封装
根目录建立assest文件
内部建立icon文件
icon文件内部建立icon.scss以及index.jsx文件
在这里插入图片描述
index.jsx

import './icon.scss'function Icon({className,style
}) {const IconClassName=()=>{let _className=['iconfont']if (typeof className=="string"){_className.push(className)}else{console.warn("iconfont只能为string类型");}return _className.join(' ')}return (<div><i className={IconClassName()} style={style}></i></div>)
}export default Icon

我们需要接收外部传来的className,以及用户定义的其他样式
秉承着约定大于配置的原则,className必传需要引入的字体样式以及自定义的style

index.scss

@font-face {font-family: "iconfont"; /* Project id 3056564 */src: url('//at.alicdn.com/t/font_3056564_2lvaxngdkl1.woff2?t=1640316034424') format('woff2'),url('//at.alicdn.com/t/font_3056564_2lvaxngdkl1.woff?t=1640316034424') format('woff'),url('//at.alicdn.com/t/font_3056564_2lvaxngdkl1.ttf?t=1640316034424') format('truetype');}.iconfont {font-family: "iconfont" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;}.icon-sousuo:before {content: "\e8ba";font-size: 16px;}

字体文件来自阿里云图标库

如何使用

//页面导入Icon文件
import Icon from '../../assest/icon'return(<Icon className="icon-sousuo"></Icon>
)

meun部分到这就结束了,下面会写第二部分也就是如下图
在这里插入图片描述
内部小球的动态渲染以及随机运动的动画,运用知识点为tweenMax。
(一个牛逼的前端交互得花里胡哨)

今天面试又失败了,想早点休息,以后再写…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_895558.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React + Vite 实现一个音乐网站(动画篇)

为了让网站能够炫酷一点&#xff0c;必然的动画是不可或缺的 现在实现一个类似canvas流动背景的功能&#xff0c;最初设计是遍历多个小球在页面上&#xff0c;然后小球在dom节点内移动变换。后决定加入小球一起变换&#xff0c;让小球跟随大球移动&#xff0c;同时小球也能有自…

React + Vite 实现一个音乐网站(aplayer音乐播放器 )

众所周知&#xff0c;音乐网站需要能播放音乐 1.页面搭建 我们需要搭建这样一个部分 那么秉承一分为二的原则&#xff0c;左边音乐列表&#xff0c;右边显示cd图片。理所应当我们得让cd运动起来。 components里面建立文件夹Music&#xff0c;文件夹内新建index.jsx和index.scs…

快速把网站变成纯灰度显示

直接上代码了&#xff0c;在Header中添加这句话&#xff1a; <style>html {filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale1);-webkit-filter: grayscale(100%);}</style> 上面的应该是对应IE的&#xff0c;Mac版Chrome&#xff0c;没有进行实测…

看李俊超老师SEO视频教程 全程笔记

SEO教程详解 一次偶然的机会发现了百度文库新推出的公开课栏目&#xff0c;并在其中发现了的李俊超老师的SEO视频教程&#xff0c;从中学到了很多知识。并在观看的过程中做了如下笔记&#xff1a; 核心思想及工作流程 1&#xff0e;内容为王&#xff0c;外链为帝&#xff0…

网站在微信中提示从浏览器打开

做微信营销活动或者APK下载推广时候&#xff0c;域名被经常被封&#xff0c;做到微信中正常使用呢&#xff1f;这就要借助一些工具来实现有效的操作。 由于微信的限制&#xff0c;通常会出现下面几种情况 1、应用文件在内置浏览器中下载全部被屏蔽掉&#xff0c;造成很多人用…

插件效果【网站开发必备】——12款响应式 Lightbox(灯箱)效果插件

文章结束给大家来个程序员笑话&#xff1a;[M] 灯箱效果&#xff08;Lightbox&#xff09;是网站中最用常的效果之一&#xff0c;用于现实相似模态对话框的效果。网络上各种 Lightbox 插件满目琳琅&#xff0c;随着应响式计划&#xff08;Respnsive Design&#xff09;的开展&a…

插件网站Formula.js – 实现 MS Excel 公式的 JavaScript 工具库

这两天一直在研究插件网站之类的问题,上午正好有机会和大家讨论一下. Formula.js 是一个实现 Microsoft Excel 和 Google Spreadsheets 等类似的电子表格应用程序拥有的强大公式的功能库&#xff0c;带给 Web 开辟人员最经常使用的日期/时光&#xff0c;文本&#xff0c;逻辑&a…

插件网站zoom.js:一款效果很独特的页面内容缩放插件

最近研究插件网站&#xff0c;稍微总结一下&#xff0c;以后继续补充&#xff1a; zoom.js 提供的 JavaScript API 让网站开发人员能够给页面内容添加缩放效果。在页面上点击&#xff0c;目标处的内容会放大&#xff0c;再次点击或者按 ESC 键即可恢复原始巨细。zoom.js 提供了…

linux服务器搭建网站

搭建网站环境用的是lnmp即&#xff1a;linuxnginxmsqlphp 1 命令行输入 wget http://soft.vpser.net/lnmp/lnmp1.5.tar.gz -cO lnmp1.5.tar.gz && tar zxf lnmp1.5.tar.gz && cd lnmp1.5 && ./install.sh lnmp 出现选择项&#xff0c;如图&#xff…

java web 网站头像上传处理 (springmvc +bootstrap+cropper)

制作头像上传。请根据您的实际需求&#xff0c;修改代码&#xff0c;不完全正确&#xff0c;仅供参考&#xff01; 前端页面设计使用bootstrap &#xff0c;头像预览和剪裁工具使用cropper 后台使用springmvc。 现在来看前端的页面设计 前端页面设计&#xff0c;自然需要boo…

大型网站架构演变和知识体系

大型网站架构演变和知识体系 之前也有一些介绍大型网站架构演变的文章&#xff0c;例如LiveJournal的、ebay的&#xff0c;都是非常值得参考的&#xff0c;不过感觉他们讲的更多的是每次演变的结果&#xff0c;而没有很详细的讲为什么需要做这样的演变&#xff0c;再加上近来感…

kali系统网站部署笔记

网站放在 其他位置----计算机------var-----www----html 首先启动nginx service nginx start 然后访问127.0.0.1 就会看到Apache正在工作 启动mysql数据库 service mysql start 接着用 mysql -u root -p 连接mysql 用户名&#xff1a;root 密码&#xff1a;123456 数据库操作命…

720vr全景网站平台系统 vr全景图制作系统

新版会员中心 模板展示 4D环物模型 2021-7.10 重磅更新&#xff1a; 支持mysql5.7 支持https 2021-8.10 更新支持邮箱注册会员 2021年升级4D功能 更新记录2020年12月修复720度环物4d功能&#xff0c;上传顺畅2021年1月修复720环物浏览放大等功能 720度环物演示http://cdn.7…

Android学习网站推荐

收集了一些主流的android学习网站&#xff0c;在这里分享给大家 1、http://www.android-study.com/ 2、http://www.eoeandroid.com/ 国内最大的Android开发社区&#xff0c;本人使用频率最高的&#xff0c;里面分享了很多源代码&#xff0c;对入门者学习很有帮助 3、http://w…

PhantomJS在Windows7下实现网站自动下载截图

1. phantomjs介绍 基于Javascript驱动的命令行webkit引擎&#xff0c;轻量级&#xff0c;安装简单&#xff0c;开发快速&#xff0c;渲染速度较快&#xff0c;无界面的webkit浏览器。 phontomjs跟一般浏览器一样可以加载网页&#xff0c;但不同的是它不会把网页显示出来&#x…

最新在线客服系统php代码微信软件公众号小程序app二维码聊天网站源码

最新在线客服系统php代码微信软件公众号小程序app二维码聊天网站源码 管理界面 独家长期更新日志(欢迎反馈BUG) 1、添加手机端前后台声音提示 2、添加后台客户管理显示在线离线 3、添加清空当前对话列表功能 4、优化手机端图标为高清 5、 修复用户端截图发送客服后台收…

【喜讯】:个人网站开通啦!

为了更好的学习技术和分享经验&#xff0c;特开通Spring Show个人网站。欢迎大家提BUG哦~~~~ 一、欢迎提意见和建议 如果大家有好的建议和意见&#xff0c;请在个人博客首页左侧的在线服务中通过在线QQ或微博联系我&#xff0c;还可以在本博客下评论。 二、网站说明 本…

快速一站式搭建免费个人网站/博客 /Blog

Hi,我是小明。 个人网站/Blog, 作为一个名片以及装13工具, 不仅可以给自己简历锦上添花, 而且当你拥有一定的访问量的时候&#xff0c;就还可以投放些恰饭广告&#xff0c;何乐不为~ 今天&#xff0c;我就教大家如何 利用 AWS 搭建个人网站。 搭建过程分以下三步: 1.申请一…

在百度云上免费搭建个人网站,小白2分钟学会,10分钟建成! ---杜凯杰

使用wordpress在百度云免费搭建个人网站&#xff0c;2分钟即可学会&#xff0c;10分钟即可建成&#xff01;适用于任何大神与小白&#xff01;–杜凯杰 有人私信给我说&#xff0c;让我发点前端的知识&#xff0c;数据获取的一个重要渠道就是网站数据的爬取&#xff0c;写爬虫…

为程序员准备的7个网站

Forrst Forrest是为开发人员和设计师提供的一个新兴的地方&#xff0c;在这里可以分享代码和截图以及链接&#xff0c;启发你的灵感。如果你曾想为你的一块代码获得一些专业实诚的建议&#xff1b;如果你在几个logo中没法做出决定的时候&#xff0c;Forrst正好适合你。此社区正…