---
title: 20200806 Astro Camp Javescript 工作坊
tags: Astro Camp, javascript, workshop
---
# 20200806 Astro Camp Javescript 工作坊
## 01 按下滑鼠,背景亮了!
```javascript=
<body>
<script>
document.body.addEventListener('click', function() {
document.body.classList.toggle('light')
})
</script>
</body>
```
`document.(任何標籤名稱)` => 選取你要做動作的地方
`addEventListener('click', function(){})`
當做'click'動作時,我要執行後面的function
`classList` 選取標籤時的class名稱
`toggle` 是將開關狀態轉換
## 02 用按鈕控制背景
```javascript=
<script>
window.addEventListener('DOMContentLoaded', function () {
document.getElementById('toggle').addEventListener('click', function () {
document.body.classList.toggle('light')
if (this.textContent === '開') {
this.textContent = '關'
}else{
this.textContent = '開'
}
})
})
</script>
```
`window.addEventListener('DOMContentLoaded', function (){}`
不確定甚麼時候要讀取script所以要加上這行,讓我們的腳本執行是在window將整個DOM讀取完才執行
`getElementById('id')` => 取到id
`textContent` 可以把文字內容改掉
要將文字切來切去,要用if去判斷
`this` => 被click這個動作綁定的東西
`this` 很複雜,不如直接用指定id的方式寫
```javascript=
<script>
window.addEventListener('DOMContentLoaded', function () {
const toggleBtn = document.getElementById('toggle');
toggleBtn.addEventListener('click', function () {
document.body.classList.toggle('light')
if (toggleBtn.textContent === '開') {
toggleBtn.textContent = '關'
}else{
toggleBtn.textContent = '開'
}
})
})
</script>
```
## 04 動態建立元件
index內
```htmlmixed=
<body>
<div class="left">
<button id='create-element'>.createElement('div.time') to append</button>
<button id='reset-inner-html'>.innerHTML = ...</button>
<button id='remove'>.remove()</button>
<button id='create-element-insert-adjacent'><div class="creat7"></div>eElement('div.time') to insert</button>
</div>
<div class="right">
<div class="title">DOM practice...</div>
<div class="time">Thu Jul 23 2020 14:39:39 GMT+0800 (Taipei Standard Time)</div>
</div>
</body>
```
1. 當按下create-element按鈕時,右邊能動態的長出現在的時間div
```javascript=
window.addEventListener('DOMContentLoaded', function () {
document.getElementById('create-element').addEventListener('click', function () {
const timeDiv = document.createElement('div')
//先宣告一個timeDiv的變數。
timeDiv.className = 'time'
//讓這個timeDiv的class名字設定成'time'。
const currentTime = new Date()
//將timeDiv的內容設定成現在的時間,並設定成字串。
timeDiv.textContent = currentTime.toString()
document.querySelector('.right').appendChild(timeDiv)
//將timeDiv用appendCild塞進class_name為right的物件內的最後一個
})
})
```
2. inner-HTML!
```javascript=
document.getElementById('reset-inner-html').addEventListener('click', function () {
document.querySelector('.right').innerHTML = '<div class="title">DOM practice...</div>'
})
```
`innerHTML` 會把所選的物件底下替換成所設定的東西,這邊用字串去處理HTML語法
使用時要小心使用者有沒有把重要的東西放在字串裡面(eg.駭客程式....)
3. 刪除最下面的欄位
```javascript=
document.getElementById('remove').addEventListener('click', function () {
const lastTime = document.querySelector('.right .time:last-child')
//選取right內最後一個time div
if (lastTime !== null) {
lastTime.remove()
}
//要判斷刪到沒有了,就不執行
})
```
4. 將建立的欄位插到title下面
```javascript=
document.getElementById('create-element-insert-adjacent').addEventListener('click', function() {
const timeDiv = document.createElement('div')
timeDiv.className = 'time'
const currentTime = new Date()
timeDiv.textContent = currentTime.toString()
//以上都跟建立新欄位都一樣
document.querySelector('.title').insertAdjacentElement('afterend',timeDiv)
//
```
## 05 Timer!