を使用してビルドPomodoroタイマー
15022 ワード
このチュートリアルでは、ポモドーロタイマをコーディングしています.⏲
私は、このホリデーシーズンのために速くエイミーDuttonとジェームズQによって作成されたCSSとJS挑戦の出現に遭遇しました.今年は楽しいチャレンジになると決めました!
だからここで私の学習と課題1日チャレンジ中に直面している.😥
何がポモドーロタイマですか?
簡単な言葉では、ポモドーロタイマは、私たちが集中し、生産的に役立つシンプルなアプリです.これは代替作業をスケジュールし、セッションを中断します.
チャレンジスペック
利用できるユーザ: スタート\/リンク\/ボタンをクリックしてタイマーを起動します. ユーザーが起動をクリックすると、単語の開始を停止するように変更されます.次に、ユーザーは、タイマーを停止するには、';停止';ボタンをクリックすることができます. 歯車のアイコンをクリックして、タイマーの長さ(分、秒)を変更します. タイマーが終了すると、リングは赤から緑に変更する必要があります. 任意のフレームワーク、ライブラリ、ツールを使用することができます良い古いCSSとバニラJSに滞在することができます.
私は昔の友人、プレーンなCSSとバニラJSに滞在することに決めました🤞🏻
だから、いくつかのコードのための時間です!
アプローチ:HTML
我々は、タイマーとスタート/ストップと設定のボタン(時間を調整するために)を表示する簡単なHTML構造を作成することから始めます
インサイド
一つ
第二に
以下は完全なHTMLコードです.
アプローチ:CSSを加える
まず、セット
を設定すると、外側のリングとタイマーの円には
アニメーションを用いた円錐状勾配の扱い👇🏻👇🏻
Codepen Link
我々は、進捗バーを使用してアニメーション化されます
以下は完全なCSSコードです.
アプローチ: JavaScriptを追加する
まず、タイマー表示、スタート/ストップボタン&設定ボタンのようなタイマーの成分を完了しましょう. 設定ボタン ゲット
スタート/ストップボタン 宣言する
The
If the
プログレスバー 私たちは
また、タイマーの合計時間に応じて、タイマーの次数/秒を計算します.
結論!
我々は正常にHTML、CSSとJavaScriptを使用してポモドーロタイマーを作成している.
我々は、'一時停止'ボタンなどのようなより多くの機能を追加するには、この拡張することができます.
何か問題があれば、下記の完全codepenを参照してください.
Codepen Link
このような記事をご覧くださいThe Introvert Coder そして、私の後を追ってください.
読書のおかげで、ハッピーコーディング!
私は、このホリデーシーズンのために速くエイミーDuttonとジェームズQによって作成されたCSSとJS挑戦の出現に遭遇しました.今年は楽しいチャレンジになると決めました!
だからここで私の学習と課題1日チャレンジ中に直面している.😥
何がポモドーロタイマですか?
The Pomodoro Technique is a time management method developed by Francesco Cirillo in the late 1980s. It uses a timer to break work into intervals, traditionally 25 minutes in length, separated by short breaks. Each interval is known as a Pomodoro, from the Italian word for tomato, after the tomato-shaped kitchen timer Cirillo used as a university student. -- Wikipedia
簡単な言葉では、ポモドーロタイマは、私たちが集中し、生産的に役立つシンプルなアプリです.これは代替作業をスケジュールし、セッションを中断します.
チャレンジスペック
利用できるユーザ:
私は昔の友人、プレーンなCSSとバニラJSに滞在することに決めました🤞🏻
だから、いくつかのコードのための時間です!
アプローチ:HTML
我々は、タイマーとスタート/ストップと設定のボタン(時間を調整するために)を表示する簡単なHTML構造を作成することから始めます
<div class="container">
<div class="outerRing">
<div class="timer">
<!-- Timer elements -->
</div>
</div>
</div>
エーcontainer
タイマーのすべてが含まれます.インサイド
container
, 私たちは2つdiv
's.一つ
outerRing
進捗バーの表示第二に
timer
カウントダウンを表示するには、起動/停止し、設定ボタンをクリックします.<div id="time">
<span id="minutes">00</span>
<span id="colon">:</span>
<span id="seconds">10</span>
</div>
<div id="stsp">START</div>
<span id="setting"><i class="fas fa-cog"></i></span>
The time
カウントダウンを表示minutes
and seconds
<span>
.以下は完全なHTMLコードです.
<div class="container">
<div class="outerRing">
<div class="timer">
<div id="time">
<span id="minutes">00</span>
<span id="colon">:</span>
<span id="seconds">10</span>
</div>
<div id="stsp">START</div>
<span id="setting"><i class="fas fa-cog"></i></span>
</div>
</div>
</div>
アプローチ:CSSを加える
まず、セット
: root
変数.次にcontainer
ページの中心へのレイアウトdisplay: grid
.を設定すると、外側のリングとタイマーの円には
15px
の間outerRing
and timer
コンテナ..outerRing {
display: grid;
place-items: center;
width: 415px;
height: 415px;
border-radius: 50%;
box-shadow: -5px 14px 44px #000000,
5px -16px 50px rgba(255, 255, 255, 0.15);
background: var(--normal-ring);
}
/* Width and Height difference btwn .outerRing & .timer is 15px,
where our progress bar will be displayed */
.timer {
width: 400px;
height: 400px;
border-radius: 50%;
background: var(--timer-bg);
box-shadow: inset 0px 0px 114px rgba(0, 0, 0, 0.45);
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
padding: 8rem;
}
outerRing
ここでは、プログレスバーをconic-gradient()
関数.アニメーションを用いた円錐状勾配の扱い👇🏻👇🏻
Codepen Link
我々は、進捗バーを使用してアニメーション化されます
conic-gradient()
JavaScriptの色.以下は完全なCSSコードです.
@import url("https://fonts.googleapis.com/css2?
family=Bebas+Neue&family=Montserrat:wght@700&display=swap");
*,
*::before,
*::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
:root {
--bg: #2b2a30;
--normal-ring: #17171a;
--red-ring: #9d0000;
--green-ring: #00aa51;
--timer-bg: radial-gradient(
71.4% 71.4% at 51.7% 28.6%,
#3a393f 0%,
#17171a 100%
);
--font-timer: "Bebas Neue", cursive;
--font-stsp: "Montserrat", sans-serif;
--font-clr: #ffffff;
}
body {
background: var(--bg);
min-height: 100vh;
overflow: hidden;
}
.container {
height: 600px;
width: 600px;
background-color: transparent;
position: absolute;
transform: translate(-50%, -50%);
top: 50%;
left: 50%;
display: grid;
place-items: center;
}
.outerRing {
display: grid;
place-items: center;
width: 415px;
height: 415px;
border-radius: 50%;
box-shadow: -5px 14px 44px #000000,
5px -16px 50px rgba(255, 255, 255, 0.15);
background: var(--normal-ring);
}
.timer {
width: 400px;
height: 400px;
border-radius: 50%;
background: var(--timer-bg);
box-shadow: inset 0px 0px 114px rgba(0, 0, 0, 0.45);
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
padding: 8rem;
}
#time {
width: 300px;
text-align: center;
margin: 3rem 0 0 0;
}
#time span {
display: inline;
color: var(--font-clr);
font-family: var(--font-timer);
font-size: 7rem;
letter-spacing: 0.1em;
text-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
}
#stsp {
color: var(--font-clr);
cursor: pointer;
font-family: Montserrat;
font-weight: bold;
font-size: 1rem;
line-height: 1.25rem;
text-align: center;
letter-spacing: 0.6em;
margin: 1rem 0;
text-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
}
#setting {
cursor: pointer;
margin-top: 1rem;
width: 25px;
height: 25px;
color: #585858;
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.25);
}
アプローチ: JavaScriptを追加する
まず、タイマー表示、スタート/ストップボタン&設定ボタンのようなタイマーの成分を完了しましょう.
Setting
, Minutes
and Seconds
要素.また、aを宣言するtoggleSettings
変数のクリックを追跡するSettings
ボタン.const minElem = document.querySelector("#minutes"),
secElem = document.querySelector("#seconds"),
setting = document.querySelector("#setting");
let toggleSettings = false;
ハンドルclick
イベントオンザSettings
ボタン.また、ハンドルonblur
イベントMinutes
and Seconds
要素.setting.onclick = function () {
if (!toggleSettings) {
toggleSettings = true;
minElem.contentEditable = true;
minElem.style.borderBottom = `1px dashed #ffffff50`;
secElem.contentEditable = true;
secElem.style.borderBottom = `1px dashed #ffffff50`;
} else {
resetValues();
}
};
minElem.onblur = function () {
resetValues();
};
secElem.onblur = function () {
resetValues();
};
機能resetValues
値をハンドルで再割り当てminutes
and seconds
.minutes
and seconds
ASlet
タイマーを表示するためにこれらを操作します.const startStop = document.querySelector("#stsp");
let minutes = document.querySelector("#minutes").innerHTML,
seconds = document.querySelector("#seconds").innerHTML;
我々がクリックするときSTART
ボタンをクリックしますminutes
and seconds
0と等しくない.その後、テキストがSTOP
を呼び出し、startStopProgress
関数.The
startStopProgress
関数は、タイマーの進行状況をチェックし、進捗バーとタイマー表示を更新します.If the
STOP
ボタンは、同じ機能を使用して進行状況をクリアし、テキストを変更するSTART
.startStop.onclick = function () {
if (startStop.innerHTML === "START") {
if (!(parseInt(minutes) === 0 && parseInt(seconds) === 0)) {
startStop.innerHTML = "STOP";
startStopProgress();
} else {
alert("Enter the Time Value in your Timer!");
}
} else {
startStop.innerHTML = "START";
startStopProgress();
}
};
setInterval()
進捗状況を追跡するコードを実行するには、次の手順に従います.function startStopProgress() {
if (!progress) {
progress = setInterval(progressTrack, speed);
} else {
clearInterval(progress);
progress = null;
progressStart = 0;
progressBar.style.background = `conic-gradient(
#17171a 360deg,
#17171a 360deg
)`;
}
}
残り時間を計算し、タイマーを更新する残り時間.また、タイマーの合計時間に応じて、タイマーの次数/秒を計算します.
Degree/Second = 360 / Total time of the timer in minutes.
使用conic-gradient()
そして、計算されたdeg/秒、DOMを更新します.function progressTrack() {
progressStart++;
secRem = Math.floor((progressEnd - progressStart) % 60);
minRem = Math.floor((progressEnd - progressStart) / 60);
secElem.innerHTML = secRem.toString().length == 2 ? secRem : `0${secRem}`;
minElem.innerHTML = minRem.toString().length == 2 ? minRem : `0${minRem}`;
progressBar.style.background = `conic-gradient(
#9d0000 ${progressStart * degTravel}deg,
#17171a ${progressStart * degTravel}deg
)`;
if (progressStart == progressEnd) {
progressBar.style.background = `conic-gradient(
#00aa51 360deg,
#00aa51 360deg
)`;
clearInterval(progress);
startStop.innerHTML = "START";
progress = null;
progressStart = 0;
}
}
完全なJavaScriptコードは、ここにあります.const progressBar = document.querySelector(".outerRing"),
minElem = document.querySelector("#minutes"),
secElem = document.querySelector("#seconds"),
startStop = document.querySelector("#stsp"),
setting = document.querySelector("#setting");
let minutes = document.querySelector("#minutes").innerHTML,
seconds = document.querySelector("#seconds").innerHTML,
progress = null,
progressStart = 0,
progressEnd = parseInt(minutes) * 60 + parseInt(seconds),
speed = 1000,
degTravel = 360 / progressEnd,
toggleSettings = false,
secRem = 0,
minRem = 0;
function progressTrack() {
progressStart++;
secRem = Math.floor((progressEnd - progressStart) % 60);
minRem = Math.floor((progressEnd - progressStart) / 60);
secElem.innerHTML = secRem.toString().length == 2 ? secRem : `0${secRem}`;
minElem.innerHTML = minRem.toString().length == 2 ? minRem : `0${minRem}`;
progressBar.style.background = `conic-gradient(
#9d0000 ${progressStart * degTravel}deg,
#17171a ${progressStart * degTravel}deg
)`;
if (progressStart == progressEnd) {
progressBar.style.background = `conic-gradient(
#00aa51 360deg,
#00aa51 360deg
)`;
clearInterval(progress);
startStop.innerHTML = "START";
progress = null;
progressStart = 0;
}
}
function startStopProgress() {
if (!progress) {
progress = setInterval(progressTrack, speed);
} else {
clearInterval(progress);
progress = null;
progressStart = 0;
progressBar.style.background = `conic-gradient(
#17171a 360deg,
#17171a 360deg
)`;
}
}
function resetValues() {
if (progress) {
clearInterval(progress);
}
minutes = document.querySelector("#minutes").innerHTML;
seconds = document.querySelector("#seconds").innerHTML;
toggleSettings = false;
minElem.contentEditable = false;
minElem.style.borderBottom = `none`;
secElem.contentEditable = false;
secElem.style.borderBottom = `none`;
progress = null;
progressStart = 0;
progressEnd = parseInt(minutes) * 60 + parseInt(seconds);
degTravel = 360 / progressEnd;
progressBar.style.background = `conic-gradient(
#17171a 360deg,
#17171a 360deg
)`;
}
startStop.onclick = function () {
if (startStop.innerHTML === "START") {
if (!(parseInt(minutes) === 0 && parseInt(seconds) === 0)) {
startStop.innerHTML = "STOP";
startStopProgress();
} else {
alert("Enter the Time Value in your Timer!");
}
} else {
startStop.innerHTML = "START";
startStopProgress();
}
};
setting.onclick = function () {
if (!toggleSettings) {
toggleSettings = true;
minElem.contentEditable = true;
minElem.style.borderBottom = `1px dashed #ffffff50`;
secElem.contentEditable = true;
secElem.style.borderBottom = `1px dashed #ffffff50`;
} else {
resetValues();
}
};
minElem.onblur = function () {
resetValues();
};
secElem.onblur = function () {
resetValues();
};
うわー、それだ!🤩🤩結論!
我々は正常にHTML、CSSとJavaScriptを使用してポモドーロタイマーを作成している.
我々は、'一時停止'ボタンなどのようなより多くの機能を追加するには、この拡張することができます.
何か問題があれば、下記の完全codepenを参照してください.
Codepen Link
このような記事をご覧くださいThe Introvert Coder そして、私の後を追ってください.
読書のおかげで、ハッピーコーディング!
Reference
この問題について(を使用してビルドPomodoroタイマー), 我々は、より多くの情報をここで見つけました https://dev.to/sansk/build-a-pomodoro-timer-using-html-css-and-javascript-53doテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol