toggle
toggle
ある設定値から別の設定値に切り替えます.「切り替え」という言葉は、2つの状態しかない場合、スイッチを押すと1つの値になり、もう一度押すと別の値になるという意味です.
Day and night toggle
event効果のあるボタンの作成(onclick)
ある設定値から別の設定値に切り替えます.「切り替え」という言葉は、2つの状態しかない場合、スイッチを押すと1つの値になり、もう一度押すと別の値になるという意味です.
Day and night toggle
event効果のあるボタンの作成(onclick)
---html---
<input type="button" value="night" onclick="
document.querySelector('body').style.backgroundColor='black';
document.querySelector('body').style.color='white';
">
<!--input 태그(value값이 'night')의 onclick 속성으로 body태그를 소환 후, style을 '배경색=black', '글자색=white'로 지정-->
<input type="button" value="day" onclick="
document.querySelector('body').style.backgroundColor='white';
document.querySelector('body').style.backgroundColor='black';
">
<!--input 태그(value값이 'day')의 onclick 속성으로 body태그를 소환 후, style을 '배경색=white', '글자색=black'로 지정-->
//총 버튼이 2개 생긴다('night', 'day')
条件文(if文)を使用して2つのボタンを1つのボタンに結合---html(2)---
<input id="night_day" type="button" value="night" onclick="
if(document.querySelector('#night_day').value === 'night') {
document.querySelector('body').style.backgroundColor='black';
document.querySelector('body').style.color='white';
document.querySelector('#night_day').value = 'day';
} else {
document.querySelector('body').style.backgroundColor='white';
document.querySelector('body').style.backgroundColor='black';
document.querySelector('#night_day').value = 'night';
}
">
<!--
if문에 참거짓(bullean)을 주기 위해 id값을 지정한다.
if문 내에 'id값(#night_day)을 소환한 뒤 value가 night'인 조건을 지정한다(=참)
if조건이 참이기 때문에 night버튼을 (on)click하면 '배경색이 black, 글자색이 white, value값이 day로 바뀜'인 효과가 표현된다.
그렇지 않을 경우(else, false)는 '배경색이 white, 글자색이 black, value값이 night로 바뀜'인 효과가 표현된다.
-->
簡略化されたコードを再パッケージ(重複除外)---html---
<!--
document.querySelector('#night_day')는 자기 자신을 참조하기 때문에 this로 바꾸기
this로 대체했기 때문에 id값은 지워주기(this자체는 속한 태그 자신을 가리킴)
-->
<input type="button" value="night" onclick="
if(this.value === 'night') {
document.querySelector('body').style.backgroundColor='black';
document.querySelector('body').style.color='white';
this.value = 'day';
} else {
document.querySelector('body').style.backgroundColor='white';
document.querySelector('body').style.backgroundColor='black';
this.value = 'night';
}
">
<!--
document.querySelector('body')의 중복을 제거하기 위해 target이라는 이름의 변수로 지정.
전부 target으로 대체한다(target변수로 핸들링 가능)
-->
<input type="button" value="night" onclick="
var target = document.querySelector('body');
if(this.value === 'night') {
target.style.backgroundColor='black';
target.style.color='white';
this.value = 'day';
} else {
target.style.backgroundColor='white';
target.style.color='black';
this.value = 'night';
}
">
繰り返し文を使用してbodyのすべてのタグスタイル効果をループ---html---
<!--
body내 모든 a태그를 소환(document.querySelectorAll('a'))하여 links라는 이름의 변수 지정.
while반복문 실행(실행내용: links에 style.color 효과 주기)
-->
var links = document.querySelectorAll('a');
var i = 0;
while ( i < links.length){
links[i].style.color='red';
i=i+1;
}
<!--
links를 반복문(while)에 적용하여 속성을 지정한 위 코드를 if문 내에 적용하기
if가 참이면 night모드(a.color=red), if가 거짓(else)이면 day모드(a.color=blue) 적용
-->
<input type="button" value="night" onclick="
var target = document.querySelector('body');
if(this.value === 'night') {
target.style.backgroundColor='black';
target.style.color='white';
this.value = 'day';
<!--links가 red가 되는 while문 적용-->
var links = document.querySelectorAll('a');
var i = 0;
while ( i < links.length){
links[i].style.color='red';
i=i+1;
}
} else {
target.style.backgroundColor='white';
target.style.color='black';
this.value = 'night';
<!--links가 blue가 되는 while문 적용-->
var links = document.querySelectorAll('a');
var i = 0;
while ( i < links.length){
links[i].style.color='blue';
i=i+1;
}
}
">
jsに分割(1)
---html---
<input type="button" value="night" onclick="
// onclick안의 event handler 내용은 전부 script로 빼주기
">
---js---
<script>
function nightDayHandler () { //nightDayHandler 함수로 전체 감싸준다
var target = document.querySelector('body');
if(this.value === 'night') {
target.style.backgroundColor='black';
target.style.color='white';
this.value = 'day';
var links = document.querySelectorAll('a');
var i = 0;
while ( i < links.length){
links[i].style.color='red';
i=i+1;
}
} else {
target.style.backgroundColor='white';
target.style.color='black';
this.value = 'night';
var links = document.querySelectorAll('a');
var i = 0;
while ( i < links.length){
links[i].style.color='blue';
i=i+1;
}
}
}
</script>
(2)
---html---
<input type="button" value="night" onclick="
nightDayHandler (this)
// nightDayHandler (this) onclick 안에 추가하여 실행 연결고리 만들기
// onclik 내에는 self가 아닌 this로 써준다.
">
/*
this: 현재 context(객체)를 참조한다(자신의 객체 변수를 가리킴), instance의 함수나 변수를 가리킨다
self: window를 참조한다. 클래스 자체에 속하는 함수나 변수를 가리킬 때 사용한다
*/
---js---
<script>
function nightDayHandler (self) {
//nightDayHandler 함수의 매개변수를 self로 바꾸고 script 내 모든 this를 self로 바꿔준다
var target = document.querySelector('body');
if(self.value === 'night') {
target.style.backgroundColor='black';
target.style.color='white';
self.value = 'day';
var links = document.querySelectorAll('a');
var i = 0;
while ( i < links.length){
links[i].style.color='red';
i=i+1;
}
} else {
target.style.backgroundColor='white';
target.style.color='black';
self.value = 'night';
var links = document.querySelectorAll('a');
var i = 0;
while ( i < links.length){
links[i].style.color='blue';
i=i+1;
}
}
}
</script>
関数の作成による再パッケージ(1)
---html---
<input type="button" value="night" onclick="
nightDayHandler (this)
">
---js---
<script>
// 'link 변수를 통해 선언된 반복문 내용'을 함수로 만들어주기
function linksSetColor (color) {
//linksSetColor라는 함수와 (color)매개변수를 통해 함수를 만들어주고 links의 내용을 넣는다
//매개변수 지정을 통해 어떤 값이든 유연하게 넣을 수 있음
var links = document.querySelectorAll('a');
var i = 0;
while ( i < links.length){
links[i].style.color=color; //(color)매개변수를 넣는다
i=i+1;
}
}
function nightDayHandler (self) {
var target = document.querySelector('body');
if(self.value === 'night') {
target.style.backgroundColor='black';
target.style.color='white';
self.value = 'day';
linksSetColor ('red'); // 위에서 함수로 정의한 linksSetColor함수로 표현한다
} else {
target.style.backgroundColor='white';
target.style.color='black';
self.value = 'night';
linksSetColor ('blue'); // 위에서 함수로 정의한 linksSetColor함수로 표현한다
}
}
</script>
(2)
---html---
<input type="button" value="night" onclick="
nightDayHandler (this)
">
---js---
<script>
// 'target.style.color' 의 중복을 없애기 위해 함수로 만들어주기
function bodySetColor (color) {
//bodySetColor라는 함수와 (color)매개변수를 통해 함수를 만들어주고 'target.style.color'의 내용을 넣는다
//nightDayHandler 내에 "var target = document.querySelector('body');"라고 정의되어 있기 때문에 target부분을 document.querySelector('body')로 변환한다
document.querySelector('body').style.color=color; //매개변수(color) 지정을 통해 어떤 값이든 유연하게 넣을 수 있음
}
function linksSetColor (color) {
var links = document.querySelectorAll('a');
var i = 0;
while ( i < links.length){
links[i].style.color=color;
i=i+1;
}
}
function nightDayHandler (self) {
var target = document.querySelector('body');
if(self.value === 'night') {
target.style.backgroundColor='black';
bodySetColor ('white'); // 위에서 함수로 정의한 bodySetColor함수로 표현한다
self.value = 'day';
linksSetColor ('red');
} else {
target.style.backgroundColor='white';
bodySetColor ('black'); // 위에서 함수로 정의한 bodySetColor함수로 표현한다
self.value = 'night';
linksSetColor ('blue');
}
}
</script>
(3)
---html---
<input type="button" value="night" onclick="
nightDayHandler (this)
">
---js---
<script>
// 'target.style.backgroundColor' 의 중복을 없애기 위해 함수로 만들어주기
function bodySetBackgroundColor (color) {
//bodySetBackgroundColor라는 함수와 (color)매개변수를 통해 함수를 만들어주고 'target.style.backgroundColor'의 내용을 넣는다
//nightDayHandler 내에 "var target = document.querySelector('body');"라고 정의되어 있기 때문에 target부분을 document.querySelector('body')로 변환한다
document.querySelector('body').style.backgroundColor=color;
function bodySetColor (color) {
document.querySelector('body').style.color=color;
}
function linksSetColor (color) {
var links = document.querySelectorAll('a');
var i = 0;
while ( i < links.length){
links[i].style.color=color;
i=i+1;
}
}
function nightDayHandler (self) {
var target = document.querySelector('body');
if(self.value === 'night') {
bodySetBackgroundColor ('black'); // 위에서 함수로 정의한 bodySetBackgroundColor함수로 표현한다
bodySetColor ('white');
self.value = 'day';
linksSetColor ('red');
} else {
bodySetBackgroundColor ('white'); // 위에서 함수로 정의한 bodySetBackgroundColor함수로 표현한다
bodySetColor ('black');
self.value = 'night';
linksSetColor ('blue');
}
}
</script>
オブジェクト(関連する関数または変数をバインド)グループを作成する---html---
<input type="button" value="night" onclick="
nightDayHandler (this)
">
---js---
<script>
/* 함수 bodySetBackgroundColor, 함수 bodySetColor 모두 body가 공통이므로
body라는 이름의 객체 생성 후 공통부분(body)을 제외한 변수명의 함수를 넣어준다 */
var body = {
setColor: function (color) {
document.querySelector('body').style.color=color;
}, // body객체 내 함수를 배열해 주므로 콤마(,)로 구분지어준다
setBackgroundColor: function (color) {
document.querySelector('body').style.backgroundColor=color;
}
}
/* 함수 linksSetColor에 대해 links라는 이름의 객체 생성 후 links를 제외한 변수명의 함수를 넣어준다 */
var links = {
setcolor: function (color) {
var links = document.querySelectorAll('a');
var i = 0;
while ( i < links.length){
links[i].style.color=color;
i=i+1;
}
}
}
//객체 body와 links로 묶어준 뒤 함수를 재정의 하였기 때문에 (객체).(메소드) 방식으로 다시 정의한다
function nightDayHandler (self) {
var target = document.querySelector('body');
if(self.value === 'night') {
body.setBackgroundColor ('black'); //(객체=body).(메소드=setBackgroundColor)
body.setColor ('white'); //(객체=body).(메소드=setColor)
self.value = 'day';
links.setColor ('red'); //(객체=links).(메소드=setColor)
} else {
body.setBackgroundColor ('white');
body.setColor ('black');
self.value = 'night';
links.setColor ('blue');
}
}
</script>
Reference
この問題について(toggle), 我々は、より多くの情報をここで見つけました https://velog.io/@kirin/toggleテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol