[JavaScript30] ☑️ 10. Hold Shift to Check Multiple Checkboxes
25761 ワード
☑️ 10. Hold Shift to Check Multiple Checkboxes
shiftキーを使用してチェックボックスを同時にチェックする機能を追加
イニシャルコード<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>Hold Shift to Check Multiple Checkboxes</title>
</head>
<div>
<style>
html {
font-family: sans-serif;
background: #ffc600;
}
.inbox {
max-width: 400px;
margin: 50px auto;
background: white;
border-radius: 5px;
box-shadow: 10px 10px 0 rgba(0,0,0,0.1);
}
.item {
display: flex;
align-items: center;
border-bottom: 1px solid #F1F1F1;
}
.item:last-child {
border-bottom: 0;
}
input:checked + p {
background: #F9F9F9;
text-decoration: line-through;
}
input[type="checkbox"] {
margin: 20px;
}
p {
margin: 0;
padding: 20px;
transition: background 0.2s;
flex: 1;
font-family:'helvetica neue';
font-size: 20px;
font-weight: 200;
border-left: 1px solid #D1E2FF;
}
</style>
<div class="inbox">
<div class="item">
<input type="checkbox">
<p>This is an inbox layout.</p>
</div>
<div class="item">
<input type="checkbox">
<p>Check one item</p>
</div>
<div class="item">
<input type="checkbox">
<p>Hold down your Shift key</p>
</div>
<div class="item">
<input type="checkbox">
<p>Check a lower item</p>
</div>
<div class="item">
<input type="checkbox">
<p>Everything in between should also be set to checked</p>
</div>
<div class="item">
<input type="checkbox">
<p>Try to do it without any libraries</p>
</div>
<div class="item">
<input type="checkbox">
<p>Just regular JavaScript</p>
</div>
<div class="item">
<input type="checkbox">
<p>Good Luck!</p>
</div>
<div class="item">
<input type="checkbox">
<p>Don't forget to tweet your result!</p>
</div>
</div>
</div>
</body>
</html>
初期画面
🌏 プロセス
👉 1.すべてのチェックボックスを見つけます。
document.querySelectorAll('.inbox input[type="checkbox"]');
Input typeがチェックボックスのすべてのタグを検索します.
👉 2.関数の作成
let lastChecked;
function handleCheck(e){
// Check if they had the shift key down
// AND check that they are checking it
let inBetween = false;
if(e.shiftKey && this.checked) {
// go ahead and do what we please
// loop over every single checkbox
checkboxes.forEach(checkbox =>{
console.log(checkbox);
if(checkbox === this || checkbox === lastChecked){
inBetween = !inBetween;
console.log('Starting to check them inbetween');
}
if(inBetween){
checkbox.checked = true;
}
})
}
lastChecked = this;
}
shiftkeyを押すイベントが発生し、選択されている場合は、これらのチェックボックスを迂回して、最初のクリックと最後のクリックの間のすべてのチェックボックスをチェックします.
falseをinBetweenに割り当て、shiftキーを押すと条件文を実行します.
最初にボタンを押すと、inBetweenがtrueになり、サブコンテンツがチェックされます.
① if(e.shiftKey && this.checked) { ~~~ }
②if(checkbox === this || checkbox === lastChecked){
inBetween = !inBetween;
}
③if(inBetween){
checkbox.checked = true;
}
shiftイベントが初めて発生した場合
👉 3.clickイベントを追加し、関数を呼び出します。
checkboxes.forEach(checkbox => checkbox.addEventListener('click' , handleCheck));
➕
css線効果を与えるもの.input:checked + p {
background: #F9F9F9;
text-decoration: line-through;
}
選択したpにline-throughを付けると、スクライブの効果が得られます.
Reference
この問題について([JavaScript30] ☑️ 10. Hold Shift to Check Multiple Checkboxes), 我々は、より多くの情報をここで見つけました
https://velog.io/@cjh951114/JavaScript30-10.-Hold-Shift-to-Check-Multiple-Checkboxes
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>Hold Shift to Check Multiple Checkboxes</title>
</head>
<div>
<style>
html {
font-family: sans-serif;
background: #ffc600;
}
.inbox {
max-width: 400px;
margin: 50px auto;
background: white;
border-radius: 5px;
box-shadow: 10px 10px 0 rgba(0,0,0,0.1);
}
.item {
display: flex;
align-items: center;
border-bottom: 1px solid #F1F1F1;
}
.item:last-child {
border-bottom: 0;
}
input:checked + p {
background: #F9F9F9;
text-decoration: line-through;
}
input[type="checkbox"] {
margin: 20px;
}
p {
margin: 0;
padding: 20px;
transition: background 0.2s;
flex: 1;
font-family:'helvetica neue';
font-size: 20px;
font-weight: 200;
border-left: 1px solid #D1E2FF;
}
</style>
<div class="inbox">
<div class="item">
<input type="checkbox">
<p>This is an inbox layout.</p>
</div>
<div class="item">
<input type="checkbox">
<p>Check one item</p>
</div>
<div class="item">
<input type="checkbox">
<p>Hold down your Shift key</p>
</div>
<div class="item">
<input type="checkbox">
<p>Check a lower item</p>
</div>
<div class="item">
<input type="checkbox">
<p>Everything in between should also be set to checked</p>
</div>
<div class="item">
<input type="checkbox">
<p>Try to do it without any libraries</p>
</div>
<div class="item">
<input type="checkbox">
<p>Just regular JavaScript</p>
</div>
<div class="item">
<input type="checkbox">
<p>Good Luck!</p>
</div>
<div class="item">
<input type="checkbox">
<p>Don't forget to tweet your result!</p>
</div>
</div>
</div>
</body>
</html>
document.querySelectorAll('.inbox input[type="checkbox"]');
let lastChecked;
function handleCheck(e){
// Check if they had the shift key down
// AND check that they are checking it
let inBetween = false;
if(e.shiftKey && this.checked) {
// go ahead and do what we please
// loop over every single checkbox
checkboxes.forEach(checkbox =>{
console.log(checkbox);
if(checkbox === this || checkbox === lastChecked){
inBetween = !inBetween;
console.log('Starting to check them inbetween');
}
if(inBetween){
checkbox.checked = true;
}
})
}
lastChecked = this;
}
if(e.shiftKey && this.checked) { ~~~ }
if(checkbox === this || checkbox === lastChecked){
inBetween = !inBetween;
}
if(inBetween){
checkbox.checked = true;
}
checkboxes.forEach(checkbox => checkbox.addEventListener('click' , handleCheck));
input:checked + p {
background: #F9F9F9;
text-decoration: line-through;
}
Reference
この問題について([JavaScript30] ☑️ 10. Hold Shift to Check Multiple Checkboxes), 我々は、より多くの情報をここで見つけました https://velog.io/@cjh951114/JavaScript30-10.-Hold-Shift-to-Check-Multiple-Checkboxesテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol