Day04

1.右下角

组件代码

import React, { useEffect, useRef, useState } from 'react'
import './rightBottom.css'
import * as echarts from 'echarts';
import today from '../../../images/today.png'
import yestoday from '../../../images/yestoday.png'
import {getFlow} from '../../../../request/index'
function RightBottom() {
    const FlowBox = useRef(null)
    const [option, setOption] = useState({
        legend: {
            data: ['Evaporation', 'Precipitation', 'Temperature'],
            textStyle:{color:'#fff',fontSize:'10px'},icon:'circle'
        },
        grid:{
            left:30,
            height:'50%',
            bottom:70
        },
        xAxis: 
            {
                type: 'category',
                data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
                axisPointer: {
                    type: 'shadow'
                }
            }
        ,
        yAxis: 
            {
                type: 'value',
                min: 50,
                max:650,
                interval: 100
            }
        ,
        series: [
            {
                name: 'Evaporation',
                type: 'bar',
                data: [],
                itemStyle: {
                    borderRadius: [20, 20, 20, 20],
                    color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                        { offset: 0, color: '#2E35FF' },
                        { offset: 0.5, color: '#751BFF' },
                        { offset: 1, color: '#A709FF' }
                    ])
                }
            },
            {
                name: 'Precipitation',
                type: 'bar',
                data: [],
                itemStyle: {
                    borderRadius: [20, 20, 20, 20],
                    color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                        { offset: 0, color: '#39DC87' },
                        { offset: 0.5, color: '#1CB846' },
                        { offset: 1, color: '#08A11B' }
                    ])
                },
                barWidth:15
            },
        ]
    })
    useEffect(() => {
        var myChart = echarts.init(FlowBox.current);
        getFlow().then(resp=>{
            console.log(666,resp.data)
            option.legend.data=resp.data.data.result[0].dimensions.slice(1)
            option.xAxis.data=resp.data.data.result[0].source.map(item=>item.product);
            option.series[0].name='今日外来访客'
            option.series[0].data=resp.data.data.result[0].source.map(item=>item['今日外来访客'])
            option.series[1].name='昨日外来访客'
            option.series[1].data=resp.data.data.result[0].source.map(item=>item['昨日外来访客'])
            console.log(22232,option)
            setOption(option)
            myChart.setOption(option)
        })
        myChart.setOption(option)
    }, [])
    return (
        <div className='right-bottom'>
            <div className='right-bottom-title'>
                <div>校园人员流动情况</div>
            </div>
            <div className='right-bottom-content'>
                <div className='right-bottom-top'>
                    <div className='right-left'>
                        <img src={today}></img>
                        <div>
                            <p>1</p>
                            <p>昨日外来访者</p>
                        </div>
                    </div>
                    <div className='right-right'>
                        <img src={yestoday}></img>
                        <div>
                            <p>1</p>
                            <p>今日外来访者</p>
                        </div>
                    </div>
                </div>
                <div className='right-bottom-bottom' ref={FlowBox}>
​
                </div>
            </div>
        </div>
    )
}
​
export default RightBottom
​

css样式代码:

.right-bottom {
    margin: 10px 50px 0;
    color: #fff;
}
​
.right-bottom-title {
    line-height: 36px;
    background-image: url('../../../images/titlebg.png');
    background-size: 100% 100%;
    transform: rotateY(180deg);
}
​
.right-bottom-title div {
    transform: rotateY(-180deg);
    padding-left: 20px;
}
​
.right-bottom-content {
    height: 210px;
    margin-top: 10px;
    background-color: #0C1D5F;
   
    .right-bottom-top{
        width: 100%;
        height: 60px;
        display: flex;
        justify-content: space-around;
        .right-left {
            width: 140px;
            height: 60px;
            display: flex;
            align-items: center;
            p{
                text-align: center;
                margin-left: 10px;
            }
        }
        .right-right {
            width:140px;
            height: 60px;
            display: flex;
            align-items: center;
            p{
                text-align: center;
                margin-left: 10px;
            }
        }
    }
​
    .right-bottom-bottom{
        width: 100%;
        height: 200px;
    }
   
}

2.中间旋转木马

首先在首页组件中,导入旋转木马子组件,并使用子组件:

定义子组件

代码逻辑

1.布局:一个盒子:=>6个对象

2.定义动画:设置间隔,匀速运动

3.书写代码的逻辑:

  • 布局:1个大盒子,定义数据(1个数组嵌套了6个对象),在大盒子中遍历渲染6个小盒子

  • 修饰样式:定义了3个动画,并将动画给小盒子做修饰

  • 通过ref获取父标签,用父标签的children获取到所有的子标签,循环给每个子标签设置动画的延迟

  • 给每个子标签绑定鼠标移入事件

    // 事件函数
    const onmouseenter = (id) => {
        // 让动画停止
        for (let a = 0; a < carouselBox.current.children.length; a++) {
            carouselBox.current.children[a].style['animation-play-state'] = `paused`
        }
        // 让当前这个变 hov 图片 ==> 知道这是哪一个要变
        // console.log(222, id);
        // 根据id找到对应的这个数据
        let carouselData = data.find(item => item.id === id)
        // 修改这个数据的active
        carouselData.active = !carouselData.active
        // 重新设置data数据
        setData([...data])
        // console.log(333, data);
    }
  • 模拟移入事件设置移出事件和点击事件

    const onmouseleave = (id) => {
        // 让动画停止
        for (let a = 0; a < carouselBox.current.children.length; a++) {
            carouselBox.current.children[a].style['animation-play-state'] = `running`
        }
        // 让当前这个变 hov 图片 ==> 知道这是哪一个要变
        // console.log(222, id);
        // 根据id找到对应的这个数据
        let carouselData = data.find(item => item.id === id)
        // 修改这个数据的active
        carouselData.active = !carouselData.active
        // 重新设置data数据
        setData([...data])
        // console.log(333, data);
    }
    const onclick = (id) => {
        let carouselData = data.find(item => item.id === id)
        alert(carouselData.text)
    }
  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值