react实现精致的多功能番茄时间管理倒计时器代码
代码语言:html
所属分类:其他
代码描述:react实现精致的多功能番茄时间管理倒计时器代码,支持关注模式、长短模式、可自定义配置修改参数和颜色,带优美的音效效果。
代码标签: react 精致 多功能 番茄 时间 管理 倒计时 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/all.6.4.0.css"> <style> @charset "UTF-8"; @import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;600;700;800&display=swap"); :root { --svg-size: 508px; } main.theme-blue { --background: #03003D; --background-dialog: #020123D9; --text-primary: #767DFF; --text-secondary: #649AFF; --text-light: #C8DDF5; --text-dark: var(--background); --text-white: #fff; --gradient1: #7676FF; --gradient2: #76B1FF; --timer-circle-outer: #1A194F; --timer-circle-inner: #090736; --btn-primary: #7677FF; --btn-secondary: #020123; --btn-color: var(--background); --border: var(--btn-primary); } main.theme-red { --background: #29003D; --background-dialog: #180123D9; --text-primary: #F56297; --text-secondary: #FF76A8; --text-light: #E6C8F5; --text-dark: var(--background); --text-white: #fff; --gradient1: #F56464; --gradient2: #F662AE; --timer-circle-outer: #3D194F; --timer-circle-inner: #260736; --btn-primary: #F6638F; --btn-secondary: #180123; --btn-color: var(--background); --border: var(--btn-primary); } main.theme-green { --background: #001B3D; --background-dialog: #011023D9; --text-primary: #00FAF2; --text-secondary: #00FAF2; --text-light: #C8F5F3; --text-dark: var(--background); --text-white: #fff; --gradient1: #00F198; --gradient2: #08F6F6; --timer-circle-outer: #19314F; --timer-circle-inner: #071C36; --btn-primary: #00F791; --btn-secondary: #011023; --btn-color: var(--background); --border: var(--btn-primary); } .resize-animation-stopper *:not(.button-container a, .button-container .highlight, main > div.hidden section > .timer) { animation: none !important; transition: none !important; } * { -webkit-user-select: none; -ms-user-select: none; user-select: none; transition: color 0.3s, background-color 0.3s; } html, body { font-family: "Montserrat", Helvetica, Arial, sans-serif; font-size: 16px; margin: 0; padding: 0; } html, body, #root { height: 100%; width: 100%; } main { background-color: var(--background); color: var(--text-light); height: inherit; scrollbar-width: none; -ms-overflow-style: none; } main::-webkit-scrollbar { display: none; } label { cursor: pointer; } label, button, a { transition: all 0.1s; } label.disabled, button.disabled, a.disabled { opacity: 0.3; pointer-events: none; } label:active, button:active, a:active { scale: 0.9; } a { cursor: pointer; text-decoration: none; font-weight: 600; color: var(--text-primary); } b { color: var(--text-primary); } input[type=radio] { cursor: pointer; position: absolute; left: -9999px; } h1 { font-size: 2em; font-weight: 600; margin: 0; margin-bottom: 0.5em; } h1 + p { text-align: justify; } p { font-size: 1.25em; line-height: 1.5em; letter-spacing: 0.025em; font-weight: 400; margin-top: 0.5em; margin-bottom: 1em; color: var(--text-default); } .badge { color: var(--text-light); padding: 0.5rem 1rem; background: var(--timer-circle-outer); border-radius: 2rem; } main { display: flex; flex-wrap: nowrap; overflow-x: clip; overflow-y: auto; height: 100%; } main > div { height: 100%; padding: 0 2em; min-width: calc(100% - 4em); max-width: 42.5em; position: relative; display: flex; flex-direction: column; align-items: center; } main > div.hidden section { left: -100%; opacity: 0; } main > div.hidden section:has(.timer) { left: -50vw; opacity: 1; } main > div.hidden + div { left: -100vw; } main > div section { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: flex-start; flex: 0; max-width: 40em; width: 100%; margin: 2em 0; left: 0; opacity: 1; transition: all 0.3s; } main > div section:nth-child(2n) { justify-content: flex-start; } main > div section:last-of-type { padding-bottom: 2em; } main > div section:has(.timer) { margin: 0; } .timer { position: relative; display: flex; align-items: center; justify-content: center; width: 33.75em; height: 33.75em; border-radius: 50%; background: var(--timer-circle-outer); transition: left 0.3s; } .timer.start { animation-name: sessionStartMini; animation-duration: 1s; } .timer svg { width: 31.75em; height: 31.75em; transform: rotate(-90deg); position: absolute; top: 1em; left: 1em; border-radius: 50%; background: var(--background); box-shadow: inset 0 0.0625em 2.875em 3.75em rgba(0, 0, 0, 0.5); } .timer svg stop:first-of-type { stop-color: var(--gradient1); } .timer svg stop:last-of-type { stop-color: var(--gradient2); } .timer svg circle { fill: none; stroke-width: 1.5em; stroke-dasharray: 95.6875em; cx: 15.875em; cy: 15.875em; r: 15.125em; } .timer svg circle.colored { stroke: url(#GradientColor); stroke-dashoffset: 95.6875em; stroke-dashoffset: 0; transition: all 1s linear 0s; } .timer svg circle.colored.start { animation-name: timerStart; animation-timing-function: linear; animation-fill-mode: forwards; } .timer svg circle.bg { stroke: var(--timer-circle-inner); } .timer .inner-circle { z-index: 1; position: relative; } .timer .inner-circle p.clock { display: grid; grid-template-columns: 1fr 0fr 1fr; color: var(--text-primary); font-size: 6.375em; line-height: 1; font-weight: 700; padding: 2rem; margin: 0; } .timer .inner-circle p.clock span { display: grid; } .timer .inner-circle p.clock span:first-of-type { justify-content: end; } .timer .inner-circle p.clock span:nth-child(2) { letter-spacing: 0; margin: 0 0.5rem; } .timer .inner-circle p.clock span:last-of-type { justify-content: start; } .timer .inner-circle a { display: block; text-decoration: none; font-size: 1.5rem; color: var(--text-secondary); letter-spacing: 1.5rem; text-indent: 0.75rem; } .timer .inner-circle .awe-container { position: absolute; left: 0; right: 0; bottom: -5em; display: flex; flex-direction: row; align-items: center; justify-content: center; column-gap: 1rem; } .timer .inner-circle .awe-container a { display: flex; align-items: center; justify-content: center; width: 3rem; height: 3rem; background: var(--timer-circle-outer); border: 0.0625rem solid var(--timer-circle-outer); border-radius: 1rem; text-indent: 0; } .timer .inner-circle .awe-container a:hover { border: 0.0625rem solid var(--text-secondary); } .timer .inner-circle .awe-container a i { letter-spacing: 0; text-indent: 0; } .controller div { display: flex; align-items: center; opacity: 1; transition: all 0.3s; } .controller div.disabled { opacity: 0.3; pointer-events: none; } .controller div .button-container { position: relative; background: var(--btn-secondary); border: 0.0625em solid var(--border); border-radius: 3.125rem; font-size: 1.25em; color: var(--text-light); letter-spacing: 0; font-weight: 600; text-align: center; margin-left: 4.25em; display: flex; align-items: stretch; justify-content: space-around; display: grid; grid-template-columns: repeat(3, minmax(33.33%, 1fr)); } .controller div .button-container a { z-index: 1; color: var(--text-light); padding: 1rem 2rem; margin: 0.25rem; white-space: nowrap; border-radius: 3.125rem; transition: all 0.3s ease-in; } .controller div .button-container a:after { content: attr(data-content); } .controller div .button-container a.bt-active { color: var(--btn-color); } .controller div .button-container .highlight { z-index: 0; position: absolute; top: 0.25rem; height: 3.5rem; background-color: var(--btn-primary); border-radius: 3.125rem; display: grid; grid-template-columns: repeat(3, minmax(33.33%, 1fr)); width: calc(33.33% - 0.5rem) !important; left: 0; right: 0; margin: auto; transition: all 0.3s ease-in-out, width 0.25s linear, left 0.25s linear, top 0s linear, border-radius 0s linear; } .controller div a:has(i) { font-size: 1.25em; padding: 2rem; } .controller h5 { color: var(--text-light); font-size: 1rem; font-weight: 400; margin-top: 2.5rem; margin-bottom: 0; } .controller a:hover { color: var(--text-white); } .btn-group { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; text-align: center; gap: 2rem; margin-top: 2rem; } .btn-group button { flex: 1; font-family: "Montserrat", Helvetica, Arial, sans-serif; border: none; cursor: pointer; font-weight: 600; text-align: center; letter-spacing: 0; padding: 1.125rem 1.75rem; } .btn-group button.primary { background: var(--btn-primary); border-radius: 3.125rem; font-size: 1.25rem; color: var(--text-dark); } .btn-group button.secondary { background: var(--btn-secondary); border: 0.0625rem solid var(--border); border-radius: 3.125rem; font-size: 1.25rem; color: var(--btn-primary); letter-spacing: 0; text-align: center; } .settings { color: var(--text-primary); left: 0; transition: all 0.3s; } .settings section { align-items: flex-start; } .settings section:last-of-type { margin-top: 0; } .settings section > div { width: 100%; margin-bottom: 2em; } .settings section > div .num-container { display: flex; flex-direction: row; align-items: center; justify-content: space-between; text-align: center; font-weight: 600; column-gap: 1rem; } .settings section > div .num-container .item { position: relative; flex: 1; width: 100%; margin-bottom: 1.5rem; } .settings section > div .num-container .item.disabled > :not(p + span) { opacity: 0.3; pointer-events: none; } .settings section > div .num-container .item.disabled p { position: relative; top: 0; transform: scale(1); transition: all 0.3s; } .settings section > div .num-container .item.disabled p + span { bottom: 0; opacity: 0; transform: scale(0); transition: all 0.3s; } .settings section > div .num-container .item.disabled:hover p { top: -1rem; opacity: 0; transform: scale(0); transition: all 0.3s; } .settings section > div .num-container .item.disabled:hover p + span { opacity: 1; bottom: 0.25rem; transform: scale(1); transition: all 0.3s; } .settings section > div .num-container .item div { display: flex; align-items: center; justify-content: space-between; border: double 0.25em transparent; border-radius: 3.125em; background-image: linear-gradient(var(--background), var(--background)), linear-gradient(to right, var(--gradient1), var(--gradient2)); background-origin: border-box; background-clip: content-box, border-box; box-shadow: inset 0 0.0625rem 2.875rem 3.75rem rgba(0, 0, 0, 0.5); } .settings section > div .num-container .item div a { position: relative; display: flex; align-items: center; justify-content: center; width: 2.5rem; height: 2.5rem; font-size: 2em; border-radius: 50%; background: var(--background); box-shadow: 0 0.125rem 3.4375rem 0.1875rem var(--background), inset 0 0 0.0625rem 2.875rem 3.75rem rgba(0, 0, 0, 0.5); margin: 0.3125rem; border: double 0.25rem transparent; border-radius: 1.875rem; background-image: linear-gradient(var(--background), var(--background)), linear-gradient(to right, var(--gradient1), var(--gradient2)); background-origin: border-box; background-clip: content-box, border-box; } .settings section > div .num-container .item div a:first-of-type:after { conten.........完整代码请登录后点击上方下载按钮下载查看
网友评论0