第三天
#100daysofmiva 編碼挑戰已經過去三天了。 ???
今天,我沒有在后端做任何事情。我需要加強我的前端技能。我將使用 javascript 進行簡單的按鈕用戶體驗設計。您是否曾經在任何網站或應用程序上提交過表單,而不僅僅是等待響應,您可以看到這些精美的文本在您單擊的按鈕上發生變化。
這就是我今天要編碼的內容。走吧!???
我們將使用基本的 html 和動態 js 開發客戶端(也稱為前端)。
超文本標記語言
對于 html,我編寫了一個帶有一個輸入和一個提交按鈕的基本表單。
<div>
<h2>button ui</h2>
<div id="message"></div>
<form id="linkform" onsubmit="submitform(event)">
<label for="rand_word">enter random word</label>
<input type="text" id="rand_word" name="rand_word" placeholder="e.g what is life?" required><button type="submit" id="submitbutton">submit</button>
</form>
</div>
登錄后復制
此表單是一個簡單的 html 結構,允許用戶輸入隨機單詞并提交。以下是每個元素的細分:
1.
用途:充當表單及其相關元素的容器。
內容: – 標有“按鈕 ui”的標題 (
)。
消息區域(),表單提交后向用戶顯示反饋。 – 實際表單(),其中包含一個輸入字段和一個提交按鈕。
2.
按鈕 ui
用途:為包含表單的頁面部分提供標題。
文字:“按鈕 ui”。
3.
用途:此 div 用于向用戶顯示消息,例如在提交表單后確認他們輸入的內容。最初,它是空的并且可能被隱藏,但它將填充文本并在表單提交后顯示。
4.
用途:這是將輸入字段和提交按鈕組合在一起的表單元素。
屬性:
id=”linkform”:為表單提供唯一標識符,以便可以在 javascript 中引用。
onsubmit=”submitform(event)”:指定提交表單時要調用的 javascript 函數。 submitform(event) 函數旨在處理表單提交過程并防止重新加載頁面的默認行為。
5.
用途:為輸入字段提供標簽,通過指示用戶應輸入的內容來提高可訪問性。
屬性: – for=”rand_word”:將標簽與 id=”rand_word” 的輸入字段關聯起來。
文字:“輸入隨機單詞”。
6.
用途:這是用戶輸入隨機單詞的輸入字段。
屬性:
type=”text”: 表示這是一個文本輸入字段。
id=”rand_word”:為輸入提供唯一標識符,將其鏈接到標簽并允許在 javascript 中引用它。
name=”rand_word”: 這是提交表單時將發送的表單數據密鑰的名稱。
placeholder=”e.g what is life?”:在用戶輸入任何內容之前在輸入字段內提供提示,建議他們可能輸入的內容的示例。
required:使此字段成為必填字段,這意味著在用戶輸入某些內容之前無法提交表單。
7.
用途:這是用戶點擊提交表單的按鈕。
屬性:
type=”submit”: 表示點擊此按鈕將提交表單數據。
id=”submitbutton”: 為按鈕提供唯一標識符,因此可以通過 javascript 輕松訪問和修改。
文本:“提交”——這是按鈕上顯示的文本。
html 概要
用戶交互:用戶在輸入字段中輸入隨機單詞,然后單擊“提交”按鈕。提交表單時,將調用 submitform(event) javascript 函數,該函數處理提交過程(例如,顯示消息、防止頁面重新加載、可能將數據發送到服務器)。
用途:此表單可用于各種目的,例如收集用戶輸入、與后端服務交互,甚至只是在用戶界面中演示表單處理。
javascript
<!-- JavaScript Code -->
<script>
function submitForm(event) {
event.preventDefault(); // Prevent the form from submitting the default way
const formData = new FormData(document.getElementById('linkForm'));
const submitButton = document.getElementById('submitButton');
const message = document.getElementById('message');
const randWord = formData.get('rand_word'); // Get the value of the rand_word field
let dotCount = 0;
const updateDots = () => {
dotCount = (dotCount + 1) % 4;
return '.'.repeat(dotCount);
};
const baseMessages = [
"Submitting",
"Still working on it",
"Hold on",
"Almost done"
];
submitButton.innerText = `${baseMessages[0]}${updateDots()}`;
submitButton.classList.add('submitting');
submitButton.disabled = true;
message.style.display = 'none'; // Hide the message box initially
// Generate a random delay between 1 and 10 seconds const delay = Math.floor(Math.random() * 9000) + 1000;
if (delay > 2000) {
let messageIndex = 0;
const messageInterval = setInterval(() => {
submitButton.innerText = `${baseMessages[messageIndex]}${updateDots()}`;
if (dotCount === 0) {
messageIndex = (messageIndex + 1) % baseMessages.length;
}
}, 500); // Clear the interval after the delay to stop the loop
setTimeout(() => clearInterval(messageInterval), delay - 500);
}
// Simulate a wait time of random delay
setTimeout(() => { message.innerText = 'You typed: ' + randWord; // Show the submitted data in the message box
message.style.display = 'block';
submitButton.innerText = 'Submitted';
submitButton.classList.remove('submitting');
submitButton.classList.add('submitted');
// Reset the button state after 2 seconds
setTimeout(() => { submitButton.innerText = 'Submit';
submitButton.classList.remove('submitted'); submitButton.disabled = false;
}, 4000);
document.getElementById('linkForm').reset(); // Reset the form fields
}, delay); // Wait for the random delay before showing the message
}</script>
登錄后復制
此 javascript 代碼處理表單提交過程,通過使用動畫點和更改消息模擬動態等待期來提供增強的用戶體驗。
下面是結果
作為后端開發人員,我遇到的唯一問題是讓點動畫化。這花了一段時間,但我能夠克服它。我期待著明天的編碼??
點擊此處預覽最終結果 https://app.marvelly.com.ng/100daysofmiva/day-3/






