/* * @Author: your name * @Date: 2022-04-22 11:03:24 * @Description: * @FilePath: /zl-large-screen/src/components/LargeScreenBoardZoom/index.tsx */ import React, { useState, useEffect } from 'react'; import Icon from '../Icon/index'; import { ILargeScreenBoardZoomProps } from '../../type/LargeScreenBoard'; import { Select, Slider, Dropdown, Tooltip, Menu } from 'antd'; import { add, subtract, bignumber, format } from 'mathjs'; const { Option } = Select; let timer = null; const LargeScreenBoardZoom: React.FC = (props) => { const { zoomList, zoomChange, preview, zoomValue } = props; const [value, setValue] = useState(zoomValue); //? Slider 这个组件 Value接受一个数字 算数的时候 类型有问题 应该初始化 const [sliderValue, setSilderValue] = useState(zoomValue * 100); useEffect(() => { setSilderValue(Math.round(zoomValue * 100)); setValue(`${Math.round(zoomValue * 100)}%`); }, [zoomValue]); const _change = (value: number) => { clearTimeout(timer); setSilderValue(value); setValue(`${value}%`); timer = setTimeout(() => { //! 这个地方做了 截流 为了防止多次请求接口 现在 大屏就有这个问题 const newValue = value / 100; zoomChange(newValue); }, 300); }; const _selectChange = (key: number | string) => { const valueItem = zoomList.find((item) => { return item?.key + "" === key; }); zoomChange(valueItem?.value); }; const _set = (value: number, type: string) => { if (type === '-') { if (value > 0.1) { value = subtract(bignumber(value), bignumber(0.01)); } else { value = 0.1; } } else { if (value >= 3) { value = 3; } else { value = add(bignumber(value), bignumber(0.01)); } } const _value = parseFloat(format(value, 14)); const newValue = Math.round(value * 100); setSilderValue(newValue); setValue(`${newValue}%`); zoomChange(_value); }; // 预览 const previewClick = () => { preview(); }; // 缩放列表 const zoomMenu = (options) => { const menus = options.map((item) => { const { label, key } = item; return { label, key }; }); return ( { _selectChange(key); }} /> ); }; return (
zoomMenu(Array.isArray(zoomList) ? zoomList : [])} placement="bottom" trigger="click" > {value === 'fit' || value === 'fill' ? '缩放中' : value}
_set(zoomValue, '-')}>
= 300 ? "zoom-disabled" : "" }`} onClick={() => _set(zoomValue, '+')}>
); }; export default LargeScreenBoardZoom;