最近參考網上的一些密碼生成器,模仿着作了一個相似的密碼生成器,密碼主要由"大寫","小寫","數字","符號"組成,具體樣式如圖:css
該文主要記錄js開發流程,css樣式會在文章結尾的給github文件中給出,主要用來記錄學習js開發流程git
1.設置樣式屬性
2.監聽input[ranger]滑動,而且改變尾隨顏色
3.設置輸入密碼生成器的數字
(js: setAttribute() 方法添加指定的屬性,併爲其賦指定的值)github
//範圍滑塊屬性。 //填充:拖動滑塊時看到的尾隨顏色。 // background:默認範圍滑塊背景 const sliderProps = { fill:'#0B1EDF', background: 'rgba(255, 255, 255, 0.214)' }; //選擇範圍滑塊容器, const slider = document.querySelector(".range__slider"); //顯示範圍滑塊值的文本。 const sliderValue = document.querySelector(".length__title"); //使用事件監聽器應用填充並更改文本的值。 slider.querySelector("input").addEventListener("input", event => { //setAttribute() 方法添加指定的屬性,併爲其賦指定的值 sliderValue.setAttribute("data-length", event.target.value); applyFill(event.target); }); //選擇範圍輸入並將其傳遞給applyFill函數 applyFill(slider.querySelector("input")); //此函數負責建立尾隨顏色並設置填充。 function applyFill(slider) { const percentage = (100 * (slider.value - slider.min)) / (slider.max - slider.min); const bg = `linear-gradient(90deg, ${sliderProps.fill} ${percentage}%, ${sliderProps.background} ${percentage + 0.1}%)`; slider.style.background = bg; sliderValue.setAttribute("data-length", slider.value); }
fromCharCode() 可接受一個指定的 Unicode 值,而後返回一個字符串。
注意:該方法是 String 的靜態方法,字符串中的每一個字符都由單獨的 Unicode 數字編碼指定。使用語法:app
//將用於建立隨機密碼字母的全部函數名稱的對象 const randomFunc = { lower: getRondomLower, upper: getRandomUpper, number: getRandomNumber, symbol: getRandomSymbol }; // 生成函數 // 全部的函數負責返回一個隨機值,咱們將使用它來建立密碼。 function getRondomLower() { //fromCharCode() 可接受一個指定的 Unicode 值,而後返回一個字符串。 // 注意:該方法是 String 的靜態方法,字符串中的每一個字符都由單獨的 Unicode 數字編碼指定。使用語法: String.fromCharCode()。 return String.fromCharCode(Math.floor(Math.random() * 26 ) + 97); } function getRandomUpper() { return String.fromCharCode(Math.floor(Math.random() * 26) + 65); } function getRandomNumber() { return String.fromCharCode(Math.floor(Math.random() * 10) + 48); } function getRandomSymbol() { const symbols = '~!@#$%^&*()_+{}":?><;.,'; return symbols[Math.floor(Math.random() * symbols.length)]; }
//選擇全部必需的DOM元素 const resultEl = document.getElementById("result"); const lengthEl = document.getElementById("slider"); //表明根據用戶建立不一樣類型密碼的選項的複選框 const uppercaseEl = document.getElementById("uppercase"); const lowercaseEl = document.getElementById("lowercase"); const numberEl = document.getElementById("number"); const symbolEl = document.getElementById("symbol"); // 按鈕來生成密碼 const generateBtn = document.getElementById("generate"); // 按鈕來複制文本 const copyBtn = document.getElementById("copy-btn"); //視圖框容器 const resultContainer = document.querySelector(".result"); // 單擊生成按鈕後顯示的文本信息 const copyInfo = document.querySelector(".result__info.right"); //單擊複製按鈕後出現文本 const copiedInfo = document.querySelector(".result__info.left");
js複製方法:dom
textarea.select(); document.execCommand("copy");
//更新COPY按鈕的CSS屬性 //獲取結果視圖框容器的邊界 let resultContainerBound = { left: resultContainer.getBoundingClientRect().left, top: resultContainer.getBoundingClientRect().top, }; //這將根據鼠標位置更新複製按鈕的位置 resultContainer.addEventListener("mousemove", e => { copyBtn.style.setProperty("--x", `${e.x - resultContainerBound.left}px`); copyBtn.style.setProperty("--y", `${e.y - resultContainerBound.top}px`); }); //複製剪貼板中的密碼 copyBtn.addEventListener("click", () => { const textarea = document.createElement("textarea"); const password = resultEl.innerText; if (!password || password == "CLICK GENERATE") { return; } textarea.value = password; document.body.appendChild(textarea); textarea.select(); document.execCommand("copy"); textarea.remove(); copyInfo.style.transform = "translateY(200%)"; copyInfo.style.opacity = "0"; copiedInfo.style.transform = "translateY(0%)"; copiedInfo.style.opacity = "0.75"; });
利用遍歷循環生成對應的字符串,利用截取對應的長度進行生成密碼ide
// 該函數負責生成密碼,而後將其返回 function generatePassword(length, lower, upper, number, symbol) { let generatedPassword = ""; const typesCount = lower + upper + number + symbol; const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(item => Object.values(item)[0]); if (typesCount === 0) { return ""; } for (let i = 0; i < length; i++) { typesArr.forEach(type => { const funcName = Object.keys(type)[0]; generatedPassword += randomFunc[funcName](); }); } return generatedPassword.slice(0, length); }
其中關於Object對象的經常使用操做,在網上看一篇對Object的經常使用操做總結,但願能夠做爲參考:https://www.haorooms.com/post/js_objectoperate函數
該密碼生成器主要js重點:
1.隨機生成對應的大寫,小寫,數字,符號
2.合成對應數量的密碼post
//這是一個簡單的密碼生成器應用,能夠生成隨機密碼,也許您可以用它們來保護您的賬戶。 //我盡力使代碼儘量簡單,請不要介意變量名。 //每次刷新時清除控制檯 console.clear(); //範圍滑塊屬性。 //填充:拖動滑塊時看到的尾隨顏色。 // background:默認範圍滑塊背景 const sliderProps = { fill:'#0B1EDF', background: 'rgba(255, 255, 255, 0.214)' }; //選擇範圍滑塊容器, const slider = document.querySelector(".range__slider"); //顯示範圍滑塊值的文本。 const sliderValue = document.querySelector(".length__title"); //使用事件監聽器應用填充並更改文本的值。 slider.querySelector("input").addEventListener("input", event => { //setAttribute() 方法添加指定的屬性,併爲其賦指定的值 sliderValue.setAttribute("data-length", event.target.value); applyFill(event.target); }); //選擇範圍輸入並將其傳遞給applyFill函數 applyFill(slider.querySelector("input")); //此函數負責建立尾隨顏色並設置填充。 function applyFill(slider) { const percentage = (100 * (slider.value - slider.min)) / (slider.max - slider.min); const bg = `linear-gradient(90deg, ${sliderProps.fill} ${percentage}%, ${sliderProps.background} ${percentage + 0.1}%)`; slider.style.background = bg; sliderValue.setAttribute("data-length", slider.value); } //將用於建立隨機密碼字母的全部函數名稱的對象 const randomFunc = { lower: getRondomLower, upper: getRandomUpper, number: getRandomNumber, symbol: getRandomSymbol }; // 生成函數 // 全部的函數負責返回一個隨機值,咱們將使用它來建立密碼。 function getRondomLower() { //fromCharCode() 可接受一個指定的 Unicode 值,而後返回一個字符串。 // 注意:該方法是 String 的靜態方法,字符串中的每一個字符都由單獨的 Unicode 數字編碼指定。使用語法: String.fromCharCode()。 return String.fromCharCode(Math.floor(Math.random() * 26 ) + 97); } function getRandomUpper() { return String.fromCharCode(Math.floor(Math.random() * 26) + 65); } function getRandomNumber() { return String.fromCharCode(Math.floor(Math.random() * 10) + 48); } function getRandomSymbol() { const symbols = '~!@#$%^&*()_+{}":?><;.,'; return symbols[Math.floor(Math.random() * symbols.length)]; } //選擇全部必需的DOM元素 const resultEl = document.getElementById("result"); const lengthEl = document.getElementById("slider"); //表明根據用戶建立不一樣類型密碼的選項的複選框 const uppercaseEl = document.getElementById("uppercase"); const lowercaseEl = document.getElementById("lowercase"); const numberEl = document.getElementById("number"); const symbolEl = document.getElementById("symbol"); // 按鈕來生成密碼 const generateBtn = document.getElementById("generate"); // 按鈕來複制文本 const copyBtn = document.getElementById("copy-btn"); //視圖框容器 const resultContainer = document.querySelector(".result"); // 單擊生成按鈕後顯示的文本信息 const copyInfo = document.querySelector(".result__info.right"); //單擊複製按鈕後出現文本 const copiedInfo = document.querySelector(".result__info.left"); //更新COPY按鈕的CSS屬性 //獲取結果視圖框容器的邊界 let resultContainerBound = { left: resultContainer.getBoundingClientRect().left, top: resultContainer.getBoundingClientRect().top, }; //這將根據鼠標位置更新複製按鈕的位置 resultContainer.addEventListener("mousemove", e => { copyBtn.style.setProperty("--x", `${e.x - resultContainerBound.left}px`); copyBtn.style.setProperty("--y", `${e.y - resultContainerBound.top}px`); }); //複製剪貼板中的密碼 copyBtn.addEventListener("click", () => { const textarea = document.createElement("textarea"); const password = resultEl.innerText; if (!password || password == "CLICK GENERATE") { return; } textarea.value = password; document.body.appendChild(textarea); textarea.select(); document.execCommand("copy"); textarea.remove(); copyInfo.style.transform = "translateY(200%)"; copyInfo.style.opacity = "0"; copiedInfo.style.transform = "translateY(0%)"; copiedInfo.style.opacity = "0.75"; }); //單擊生成時,將生成密碼ID generateBtn.addEventListener("click", () => { const length = +lengthEl.value; const hasLower = lowercaseEl.checked; const hasUpper = uppercaseEl.checked; const hasNumber = numberEl.checked; const hasSymbol = symbolEl.checked; resultEl.innerText = generatePassword(length, hasLower, hasUpper, hasNumber, hasSymbol); copyInfo.style.transform = "translateY(0%)"; copyInfo.style.opacity = "0.75"; copiedInfo.style.transform = "translateY(200%)"; copiedInfo.style.opacity = "0"; }); generateBtn.addEventListener("click", () => { const length = +lengthEl.value; const hasLower = lowercaseEl.checked; const hasUpper = uppercaseEl.checked; const hasNumber = numberEl.checked; const hasSymbol = symbolEl.checked; resultEl.innerText = generatePassword(length, hasLower, hasUpper, hasNumber, hasSymbol); copyInfo.style.transform = "translateY(0%)"; copyInfo.style.opacity = "0.75"; copiedInfo.style.transform = "translateY(200%)"; copiedInfo.style.opacity = "0"; }); // 該函數負責生成密碼,而後將其返回。 function generatePassword(length, lower, upper, number, symbol) { let generatedPassword = ""; const typesCount = lower + upper + number + symbol; const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(item => Object.values(item)[0]); if (typesCount === 0) { return ""; } for (let i = 0; i < length; i++) { typesArr.forEach(type => { const funcName = Object.keys(type)[0]; generatedPassword += randomFunc[funcName](); }); } return generatedPassword.slice(0, length); }
而且你們但願看到其餘css,js代碼,能夠查看個人github地址:https://github.com/panpanxiong3/Front-end-effect-link學習