您好,登錄后才能下訂單哦!
本文小編為大家詳細(xì)介紹“react可拖拽進(jìn)度條怎么實(shí)現(xiàn)”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“react可拖拽進(jìn)度條怎么實(shí)現(xiàn)”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。
效果
/* * @Author: hongbin * @Date: 2022-04-16 13:26:39 * @LastEditors: hongbin * @LastEditTime: 2022-04-16 21:00:02 * @Description:拖動(dòng)進(jìn)度條組件 */ import { FC, ReactElement, useRef } from "react"; import styled from "styled-components"; import { flexCenter } from "../../styled"; interface IProps { /** * 0-1 */ value: number; /** * callback 0-1 */ onChange: (percent: number) => void; } const ProgressBar: FC<IProps> = ({ value, onChange }): ReactElement => { const totalRef = useRef<HTMLDivElement>(null); return ( <Container> <div ref={totalRef}> <div style={{ width: value * 100 + "%" }} /> </div> <div onMouseDown={(e) => { const { offsetWidth } = totalRef.current!; const stop = e.currentTarget; const { offsetLeft } = stop; stop.style["left"] = offsetLeft + "px"; const { pageX: start } = e; const move = (e: MouseEvent) => { let val = offsetLeft + e.pageX - start; if (val <= 0) val = 0; if (val >= offsetWidth) val = offsetWidth; // stop.style["left"] = val + "px"; onChange(val / offsetWidth); }; const clear = () => { document.removeEventListener("mousemove", move); document.removeEventListener("mouseup", clear); document.removeEventListener("mouseleave", clear); }; document.addEventListener("mousemove", move); document.addEventListener("mouseup", clear); document.addEventListener("mouseleave", clear); }} style={{ left: value * 100 + "%" }} ></div> </Container> ); }; export default ProgressBar; const Container = styled.div` position: relative; width: 10vw; height: 1vw; ${flexCenter}; & > :first-child { width: inherit; height: 0.5vw; background-color: var(--tint-color); border-radius: 10vw; overflow: hidden; display: flex; align-items: center; padding: 0.05vw; div { width: 5vw; height: 0.4vw; background-color: var(--deep-color); border-radius: 0.4vw; } } & > :last-child { width: 1vw; height: 1vw; background-color: var(--deep-color); border-radius: 1vw; position: absolute; cursor: pointer; transform: translateX(-0.5vw); svg { width: 0.9vw; } } `;
export const flexCenter = css` display: flex; justify-content: center; align-items: center; `;
:root { --deep-color: #978961; --tint-color: #efe5d4; }
讀到這里,這篇“react可拖拽進(jìn)度條怎么實(shí)現(xiàn)”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。