仿CSDN排行榜

效果图

在这里插入图片描述

JS

import React, { useState } from 'react'
import styles from './style.less'
const contentStyle = {
    color: '#fc5531'
}
const yus = 'https://www.dataojocloud.com/dataeye/v1/data/image/get?imageid=617a5596fd73380b818dc300'
const gy = 'https://www.dataojocloud.com/dataeye/v1/data/image/get?imageid=617a559d2ee1bd5a04779569'
const contentData = [
    { name: '全球综合热榜', text: '72h, 热度 石更', id: 1 },
    { name: '领域内容榜', text: '专业领域精品, 日更', id: 2 },
    { name: '热门专栏榜', text: '高销量专栏榜, 日更', id: 3 },
    { name: '新晋作者榜', text: '优质新作者推荐, 周更', id: 4 },
    { name: '问答酬金榜', text: '高赏金问题推荐,日更', id: 5 },
    { name: '作者周榜', text: '近期活跃作者, 周更', id: 6 },
    { name: '作者总榜', text: '合规活跃作者,周更', id: 7 },
    { name: '历史贡献榜', text: '创作累积贡献, 周更', id: 8 },
    { name: 'T500 标杆指数', text: '最火技术栈, 周更', id: 9 },
    { name: '原力月榜', text: '活跃贡献者, 日更', id: 10 },
    { name: '新人榜', text: '新人榜贡献者, 日更', id: 11 },
    { name: '社区榜', text: '最近活跃社区, 日更', id: 12 },
]
const index = () =>
{
    // 鼠标键入行
    const [active, setActive] = useState(null)  // 鼠标移入
    const [activeClick, setActiveClick] = useState(null)  // 鼠标点击
    const enterActive = (id) =>
    {
        setActive(id)
    }
    // 鼠标离开 Ul
    const leaveActive = () =>
    {
        setActive(false)
    }
    const clickActive = (id) =>
    {
        setActiveClick(id)
    }
    return (
        <div className={styles.container}>
            <ul onMouseLeave={leaveActive}>
                {contentData.map((data, index) => (
                    <li className={styles.listItem} key={index} onClick={() => clickActive(data.id)} onMouseOver={() => enterActive(data.id)}>
                        <div className={styles.itemBox}>
                            <img src={active === data.id ? gy : activeClick === data.id ? gy : yus} alt="" />
                        </div>
                        <div className={styles.itemContent}>
                            <div style={active === data.id ? contentStyle : activeClick === data.id ? contentStyle : null} className={styles.text}>{data.name}</div>
                            <div className={styles.dec}>{data.text}</div>
                        </div>
                    </li>
                ))
                }
            </ul>
        </div >
    )
}

export default index

CSS

body {
  margin: 0;
  padding: 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  font-family: PingFang SC, Hiragino Sans GB, Arial, Microsoft YaHei, Verdana, Roboto, Noto, Helvetica Neue, sans-serif;
}

ul {
  padding: 0;
  margin: 0;
  list-style-type: none;
}

.container {
  margin: 100px auto;
  width: 300px;

  img {
    width: 100%;
    height: 100%;
  }

  ul {
    background: #fff;
    border-radius: 4px;
    padding-top: 8px;
    padding-bottom: 16px;
    border: 1px solid #f0f0f5;
  }

  li {
    display: flex;
    align-items: center;
    -webkit-box-align: center;

  }

  .listItem {
    clear: both;
    margin-top: 6px;
    cursor: pointer;
  }
}

.itemBox {
  margin: 0 16px;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  overflow: hidden;
}

.itemContent {
  display: flex;
  align-items: center;
  flex: 1;
  padding-top: 10px;
  padding-bottom: 10px;
  margin-right: 14px;

  .text {
    font-size: 16px;
    font-weight: 500;
    color: #222226;
    line-height: 22px;
    margin-right: 8px;
  }

  .dec {
    font-size: 12px;
    color: #555666;
  }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

臧小川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值