当前位置: 首页 > news >正文

被网站开发公司坑石大远程网页设计与网站建设答案

被网站开发公司坑,石大远程网页设计与网站建设答案,网站群建设 效果,请打开网站简介 本文将会基于react实现滚动菜单栏功能。 技术实现 实现效果 点击菜单,内容区域会自动滚动到对应卡片。内容区域滑动,指定菜单栏会被选中。 ScrollMenu.js import {useRef, useState} from "react"; import ./ScrollMenu.css;export co…

简介

        本文将会基于react实现滚动菜单栏功能。

技术实现

实现效果

       点击菜单,内容区域会自动滚动到对应卡片。内容区域滑动,指定菜单栏会被选中。

ScrollMenu.js
import {useRef, useState} from "react";
import './ScrollMenu.css';export const ScrollMenu = ({products}) => {// 获取 categoryProductMapconst categoryProductMap = new Map();products.forEach(product => {const category = product.category;let categoryProductList = categoryProductMap.get(category);if (!categoryProductList) {categoryProductList = [];}categoryProductList.push(product);categoryProductMap.set(category, categoryProductList);});// 获取类别列表const categoryList = Array.from(categoryProductMap.keys());// 菜单选中索引const [current, setCurrent] = useState(0);/*** 内容引用*/const contentRef = useRef();/*** 当左侧菜单点击时候*/const onMenuClick = (idx) => {if (idx !== current) {// 内容自动滚动到对应菜单位置contentRef.current.scrollTop = height.slice(0, idx).reduce((a, b) => a + b, 0);setCurrent(idx);}}/***  计算右侧商品类别卡片高度*/const height = [];const itemHeight = 25;categoryList.forEach((category, index) => {var productCnt = categoryProductMap.get(category).length;height.push((productCnt + 1) * itemHeight); // 0.8 是header高度});console.log(height)/*** 当右侧内容滚动时候*/const onContentScroll = () => {const scrollTop = contentRef.current.scrollTop;if (current < height.length - 1){const nextIdx = current + 1;// 计算下一个位置高度const nextHeight = height.slice(0, nextIdx).reduce((a, b) => a + b, 0);console.log('scrollTop', scrollTop, 'nextHeight', nextHeight, 'nextIdx', nextIdx)if (scrollTop >= nextHeight) {contentRef.current.scrollTop = nextHeight;setCurrent(nextIdx);return;}}if (current > 0) {const lastIdx = current - 1;// 计算上一个位置高度const lastHeight = height.slice(0, lastIdx).reduce((a, b) => a + b, 0);console.log('scrollTop', scrollTop, 'lastHeight', lastHeight, 'lastIdx', lastIdx)if (scrollTop <= lastHeight) {contentRef.current.scrollTop = lastHeight;setCurrent(lastIdx);return;}}}return (<div className='scroll-menu'><div className='menu'>{// 菜单列表categoryList.map((category, index) => {return (<div className={"menu-item" + ((index === current )? '-active' : '')}key={`${index}`} id={`menu-item-${index}`}onClick={(event) => {onMenuClick(index)}}>{category}</div>)})}</div><div className='content' ref={contentRef} onScroll={(event) => {onContentScroll()}}>{categoryList.map((category, index) => {// 获取类别商品const productList = categoryProductMap.get(category);return (<div key={index}><div className='content-item-header' key={`${index}`}id={`content-item-${index}`} style={{height: itemHeight}} >{category}</div>{productList.map((product,idx) => {return <div className='content-item-product'style={{height: itemHeight}}  key={`${index}-${idx}`} >{product.name}</div>})}</div>)})}</div></div>)
}
ScrollMenu.css
.scroll-menu {display: flex;flex-direction: row;width: 300px;height: 100px;
}.menu{width: 90px;height: 100px;display: flex;flex-direction: column;
}.menu-item {text-align: center;vertical-align: middle;}.menu-item-active {text-align: center;vertical-align: middle;background-color: lightcoral;
}.content {width: 210px;overflow: auto;
}.content-item-header{text-align: left;vertical-align: top;background-color: lightblue;
}.content-item-product{text-align: center;vertical-align: center;background-color: lightyellow;
}
App.js
import './App.css';
import {ScrollMenu} from "./component/scroll-menu/ScrollMenu";const App = ()=> {const products = [{category:'蔬菜',name:'辣椒'},{category:'蔬菜',name:'毛豆'},{category:'蔬菜',name:'芹菜'},{category:'蔬菜',name:'青菜'},{category:'水果',name:'苹果'},{category:'水果',name:'梨'},{category:'水果',name:'橘子'},   {category:'食物',name:'肉'},   {category:'食物',name:'罐頭'},   {category:'食物',name:'雞腿'}];return (<ScrollMenu products={products}/>)
}export default App;

http://www.yayakq.cn/news/570124/

相关文章:

  • 英文网站怎么设计注册越南网站vn
  • 重庆建设工程招标信息网站广告平面设计师
  • 温州网站设计网站建设网站买一个域名大概多少钱
  • 合肥网站网页设计橡皮泥手工制作大全简单
  • 网站建设公司信息微信管理系统后台
  • 建筑人才网站哪个比较好app推广接单渠道
  • 莱芜装修网站杭州做网站比较好的公司
  • 泰州企业网站建设汕头第一网e京网
  • 手机端企业网站源码企业网站内容管理
  • 优购物官方网站女鞋软膜做网站有用吗
  • 在线做网页的网站乐清网站建设服务
  • 图片展示网站php源码做网站需要购买地域名吗
  • 网站建设应列入啥费用辽宁工程建设信息网诚信库
  • 如何做网站的外部链接上海有名的网站建设公司有哪些
  • 网站建设合作wordpress文章截断
  • 固安建设行政主管部门官方网站四川网络推广公司哪家好
  • nas做视频网站wordpress建站不知道密码
  • 口碑好的移动网站建设学院网站建设情况总结
  • 泉州建站模板免费咨询法律平台
  • 网站建设 域名主机怎么做网站的内链外链
  • 网站做301跳转的作用专业网站建设机构
  • 广州建站哪个济南兴田德润实惠吗wordpress fsockopen
  • 试用网站要怎么做网络营销公司有哪些
  • 做期货应该看的网站太空为什么要建站
  • 巢湖网站开发贵阳网站建设方案书
  • 优酷土豆网站建设wordpress更换主题500
  • 网站及app建设河南网站建设平台
  • 磁县网站设计公司网站建设的开发的主要方法
  • 营销展示型网站模板杭州手机网站
  • 不会编程如何做自己的网站重庆响应式网站平台