回到首頁
李明哲多媒體寫作教學

2026年6月18日 星期四

你選中那一個?

你選中那一個?

下列有許多圖片,都是小圖片。你可以任選一個,click一下,那張就會變大。其他消失。再click一下那張大照片,就會恢復原狀。

這是要使用 javascript 來找出你按下去的是那一張,再對那一張進行 class 的變動。

所以,如何選取就是思考上的重中之重。

在這裡,文科生,我們要會使用 css 選取器,你才不會要用到奇怪的計算方法。

1. 要把 flex 裡面的 div 都選出來。 document.querySelectorAll(".flexcontainer >div");
2. 每個 div 都要被賦予可以 click 的功能,所以要會遍歷功能, forEach。以及 div 有監聽的功能,addEventListener("click", (event) => {}); ,即有 click 的動作後,就可以去做什麼事。
3. 我們用 classList.toggle() 的功能,把 class 的許多屬性加到 div 裡面去,這是文科生最好用的方法,直觀的用就可以。

語法:

<style type="text/css">.flexcontainer {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.flexcontainer >div {
width: 24%;
margin-bottom: 5px;
}
.flexcontainer >div >img {
width: 100%;
}
.displaynodiv {

display: none !important;
}
.largeDiv {
display: block !important;
width: 100% !important;
transition: 1s all;
}
</style>
<div class="flexcontainer">
<div><img src="https://images.pexels.com/photos/38146388/pexels-photo-38146388.jpeg" /></div>

<div><img src="https://images.pexels.com/photos/38146387/pexels-photo-38146387.jpeg" /></div>

<div><img src="https://images.pexels.com/photos/38146357/pexels-photo-38146357.jpeg" /></div>

<div><img src="https://images.pexels.com/photos/38146336/pexels-photo-38146336.jpeg" /></div>

<div><img src="https://images.pexels.com/photos/38146330/pexels-photo-38146330.jpeg" /></div>
</div>
<script>
const allDivcontainer = document.querySelectorAll(".flexcontainer >div");
allDivcontainer.forEach(element =>{
element.addEventListener("click", (evnet) =>{
allDivcontainer.forEach(element =>{
element.classList.toggle("displaynodiv");

});
event.currentTarget.classList.toggle("largeDiv");
});

});
</script>

2026年6月7日 星期日

就是不要那一個


先按下去看看吧!

第一個div
第二個div
第三個div
第四個div
**按下去的是第幾個div啊?


看到了嗎?

按下去那一個,和其他的顏色都不一樣。

文科生會說,啊,被排擠了。


語法:

<style>
#test0608 div {
border: 1px solid red;
margin-bottom: 5px;
font-size: 3em;
padding: 5px;
}
</style>

<div id="test0608">
<div>第一個div</div>
<div>第二個div </div>
<div>第三個div </div>
<div>第四個div</div>
</div>
<div id="test060802" style="font-size: 2em;">**按下去的是第幾個div啊?
</div>
<script>
const divElements = document.querySelectorAll("#test0608 div");
divElements.forEach(dive => {
dive.addEventListener("click", (event) => {
event.target.style = "color: red;";
let pattern = Array.from(divElements).indexOf(event.target);
let patternadd = pattern +1;
document.querySelector("#test060802").append(patternadd);
const elements = document.querySelectorAll(`#test0608 :not(:nth-of-type(${patternadd}))`);

elements.forEach(el => {
el.style = 'color: green';
});
});
});
</script>



2026年6月4日 星期四

把特定文字刪除掉,文字節點的使用


先看一下下列這個html的文本。

<div id="testid0604">
<p>00000</p>
11111 iiiii<br>
22222
<br>
33333<span>44444</span>
55555 uuuuu
<p>66666</p>
</div>

可以看到,div內有很多節點物件,如本例,<p></p>、<span></span>、<br>、<br>、<p></p>等5個,又稱之為元素節點。但也有文字物件、例如11111 iiiii、22222、33333、55555 uuuuu等4個,也稱為文字節點。

如果我們來進行計算,可以看到共有9個節點物件。

我們可以透過節點物件的概念,找出文字節點。這樣,我們就可以對文本內的特定文字進行操作,例如刪除。

要注意的是,javascript會把<div>以及</div>也算2個計算進去,所以,一共會有11個節點物件。但在其排列序列的數字列表是0-10。亦即<div>是序列0,而</div>是序列10。而<p>00000</p>是序列1。

語法:
<script>
const divNodesList = document.querySelector("#testid0604").childNodes;
//節點物件的集合

let Nodescontent = divNodesList[2].textContent;
//找出第2序列列表的節點元素,亦即0,1,2的2,一般概念中的第三個,其內容是什麼。

divNodesList[7].remove();
//會刪除序列7的節點,即第八個節點物件
</script>

前面的html文本,呈現如下:

00000

11111 iiiii
22222
3333344444 55555 uuuuu

66666


按一下,刪除第八個節點物件。即<span>44444</span>那一個。

再按一下,把第三個(文字)節點內容,即divNodesList[2].,寫到下列的div中。

 


 

2026年6月2日 星期二

陣列的作用和操作



1


按下去,就有「相應的」的文字跑出來。這「相應的」的文本表現需求,就應可以使用陣列這種程式寫作思維來想看看。

const cars = ["Saab", "Volvo", "BMW"];

這是陣列 an array 語法形態。可以看到,cars 是陣列名稱。裡面包含了三個內容物。

為什麼要使用這種,是在一種什麼樣的思考推動下,所以要採用陣列的操作模式來完成作品。

陣列會給裡面的內容物一種序列,有數字的序列,從 0 開始。這樣,我們就可以用「數字」來指稱內容物,而加以使用。

在javascript中,使用數字和使用名詞是完全不相同的,運思邏輯。

同樣是 1 ,當成數字使用字,就可以進行加減乘除。如果當成名詞,就只是一個「文字」。文字,無法進行數字運算。

我們把陣列轉成數字序列,可以使用下列語法表示:

const  index = cars.indexOf("saab");

saab 所代表的序列數字是 0。然後,我們可以用數字來運算了。 0+1=1,所以現在指向了 Volvo 。

看一下下列語法,空白框      被填入的效果是 空白 ,空白框有變化了。


語法:

<script>
const cars = ["Saab", "Volvo", "BMW"];
let index = cars.indexOf("Saab");
let indexch = index + 1;
document.querySelector("#testid0603").textContent = cars[indexch];
</script>





 

2026年5月29日 星期五

按下去的輪迴!


很多時候,我們常常要按一下有動作,再按一下就返回之前狀況。

可以用click之後增加了 .classList.toggle 功能來完成,或是用 if else 的寫法。

耐著性子研究一下吧,沒那麼難。

 

語法:

<style type="text/css">
.flexcon0529 {
display: flex;
flex-wrap: wrap;
justify-content: flex-start;
}

.flexcon0529 >div {
width: 24%;
order: 1;
}

.flexcon0529 >div >img {
width: 100%;
}

.itemorder {
order: 0 !important;
}
.widthch {
width: 100% !important;
}

.widthchimg {
position: relative;
z-index: 999 ;
}
</style>
<div class="flexcon0529">
<div><img src="https://images.pexels.com/photos/37819701/pexels-photo-37819701.jpeg" /></div>

<div><img src="https://images.pexels.com/photos/37819695/pexels-photo-37819695.jpeg" /></div>

<div><img src="https://images.pexels.com/photos/37819692/pexels-photo-37819692.jpeg" /></div>

<div><img src="https://images.pexels.com/photos/37819684/pexels-photo-37819684.jpeg" /></div>
</div>

<script>

const contDiv0529 = document.querySelectorAll(".flexcon0529 >div");

let divwidth0529 = document.querySelector(".flexcon0529").clientWidth;

let sta = 1;

contDiv0529.forEach(myFunction0529);

function myFunction0529(ele) {

ele.addEventListener("click", function() {
this.classList.toggle("itemorder");
this.firstElementChild.classList.toggle("widthchimg");

if (sta === 1) {

this.firstElementChild.style.width =divwidth0529+"px" ;  sta = 0;} else {
this.firstElementChild.style.width = "100%";  sta = 1;
}
});

};
</script>


end  of the article!!

2026年5月26日 星期二

在特定文字位置前後加入文字


有時候,我們想互動的方式是,想在文章中的特定位置的前後,加入一些文字。
那麼,可以使用 .before 或 .after 這語法,在特定位置前後,以兄弟位置關係來加入文字。


 
這是我們要練習的文字。可以看到,這裡是被預設的位置。click之後,一些文字將在這位置的前後面加入。

 

語法:
<script>
const divASpan0527 = document.querySelector("#divId052701 > span");
const newSpanB = document.createElement("span");
newSpanB.style = "color: blue;";
newSpanB.textContent = "**這是span的文字**"

divASpan0527.addEventListener("click", (event)=> {
divASpan0527.before(newSpanB);
event.target.after("%%這是後面加入的字%%");
});
</script>

2026年5月23日 星期六

互動設計思考中的「遍歷」概念

你可以看到下列有三個 div ,如果你去按一下,這三個都會有變化。

在做法上,並不是一個一個去設定,而是去有一種設定的概念和做法,一次就把那三個 div 都設定好了。

這種互動設計的概念和做去,稱之為「遍歷」。

在互動文本寫作中,這是必要的手法之一,可以讓你對如何互動有更多思考上的可能。

語法是,.forEach 。


 
this is A
this is B
this is C


看一下語法:

<div data-note="test0524">
<div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">this is A</div>

<div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">this is B</div>

<div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">this is C</div>
</div>
<script>
// 1. 選取目標元素,這是 div 標籤
const elements = document.querySelectorAll("div[data-note='test0524'] >div");

// 2. 遍歷每一個元素並指定 onclick 事件
elements.forEach(element => {
    element.onclick = function() {
        this.innerHTML = "這是新填入文字";
        // 在這裡加入您的點擊邏輯
    };
});
</script><br />

說明:

你可以看到 data-note="test0524",這是我們為 div 給了一個我們自己設定的標籤標記。這樣就不用每一次都用 class 或是 id 。

再來,.querySelectorAll("div[data-note='test0524'] >div") 是使用 css 的選擇器來選擇。如果不會css選擇器的運用,這一部分,你真的要去學會。

2026年5月7日 星期四

受眾的介入互動



 

你可以把字寫進下面的填入區。
填入區:



於是你可以看到,下面的 div 框,你填入的在這裡面了,並有了html 的標記可以使用。
 


語法:

<p>你可以把字寫進下面的填入區。<br />
填入區:<input id="myInput" oninput="myFunction()" type="text" /></p>
<br />
<br />
於是你可以看到,下面的 div 框,你填入的在這裡面了,並有了html 的標記可以使用。
<div id="demo" style="border: 1px solid red; font-size: 36px; color: blue; padding: 5px 0px;">&nbsp;</div>
<script>
function myFunction() {
  let text = document.getElementById("myInput").value;
  document.getElementById("demo").innerHTML = text;
}
</script>



第二種語法的寫法,使用 addEventListener 參考看看。

 

語法:

<input id="myInput02" placeholder="請打入你要講的字!" type="text" />
<div id="id05071617" style="border: 1px solid red; font-size: 24px; padding: 5px 0px; width: 35%;">&nbsp;</div>
<script>
document.getElementById("myInput02").addEventListener("input", myFunction02);
function myFunction02() {
document.getElementById("id05071617").innerHTML = "&nbsp;" + document.getElementById("myInput02").value;
}
</script>


2026年5月5日 星期二

給文科生的 javascript 寫作課:選取

再來是選取。

如果你要在文本中做出「互動」的呈現,那麼,首先,你要找出一個物件,這物件讀者可以來對它做出互動的操作,然後呈現出互動的效果。

找出那個要被互動的物件,就是選取

選取,是互動的基本功。不是嗎?

  你可以按下去。去看看發生了什麼事?發生了這件事!

選取最基本的操作概念,是去選出那只有唯一識別的物件。不是嗎?所以,css 中的 id 就是常被用到的操作概念和手法。

請看那互動的語法。
 
onclick="document.getElementById('sp050601').style.fontSize='128px';"

所以,你可以看出來,選取動作的指令語法是 getElementById("idname");

整體的語法句子就是說,在document(這一文件)中,去選出 id 的名稱是 sp050601 的物件,再對這被選出的物件的  style,加入的參數變化 fontSize,使字加大到128px。

這樣看得懂了嗎。

 

以 class 來進行選取

class 可以套用到很多元素物件,所以使用 class 來當作選取的指涉標記,那麼,我們就要從相同 class 的被選取物中,再指定出「那一個」是我們相要去互動的。

這也是我們常碰到的操作思考上的狀況。
 
this is div1 with class cla05060246
this is div2 with class cla05060246
this is div3 with class cla05060246

請按這裡來啟動互動。

從選出的許多 class 標計物中,再指定出特定的項目的操作語法是:

document.getElementsByClassName("classname")[1];

要指定特定項目,要加上[x]。0,代表第一個,以此類推。本例是第二個,所以完整的物件內的互動語法是:


<span onclick="document.getElementsByClassName('cla05060246')[1].style.fontSize = '56px';"  style="background-color:#FFFF00;">請按這裡來啟動互動。</span>



與CSS 語法的配合

再來是,如果你對 CSS 的用法,以及選擇器有不錯的能力,那麼下列的操作語法,同樣是選擇的作用,但和 CSS 的寫法是相同的。這個更被常用。

請按這裡來啟動互動02。

語法:
<span onclick="document.querySelectorAll('.cla05060246')[0].style.fontSize = '56px';" style="background-color:#FFFF00;">請按這裡來啟動互動02。</span>

/**/和下面的語法比較 起來,多了 「All」 。指選出全部。所以仍要加上 [x],以指定項目,此例為第一個。

請按這裡來啟動互動03。

語法,
<span onclick="document.querySelector('.cla05060246:last-of-type').style.fontSize = '56px';" style="background-color:#FFFF00;">請按這裡來啟動互動03。</span>

/**/這個就考驗你的 CSS 選擇器的使用功力了。用 CSS 選擇器語法,選出特定項目。


 

2026年5月4日 星期一

用javascript寫出一個div物件

我們有能力用 html 以及 css 把媒材呈現在網頁上,這是網頁寫作基本能力。

再來是,你有能力用 javascript 把媒材也呈現在網頁上嗎?這是網頁互動文本寫作的基本能力。

這是用 div 寫出來的文本。

語法:

<style>
.cla0505 {
border: 1px solid gray;
padding: 1em;
text-align: center;
}
</style>
<div style="display: flex; border: 1px solid gray; padding: 5px;">
<div class="cla0505" style=" border: 1px solid lightgray; flex: 1; margin-right: 3px;">
這是用 div 寫出來的文本。<br>
</div>
<div class="cla0505" style=" border: 1px solid lightgray; flex: 1; margin-left: 3px;">
</div>
</div>

<script>
const newdiv0505 = document.createElement("div");
newdiv0505.innerHTML = "這是用 javascript 寫成的 div。"
document.querySelectorAll(".cla0505")[1].append(newdiv0505);
</script>



為什麼要會使用javascript來寫呢?用DIV不是更簡單嗎?長的都一樣啊!

那是因為用javascript來寫,就可以很容易對這一個 javascript 所生成 div 進行互動控制。即語法中的 newdiv0505 這一個物件。

請按這裡。讓 javascript 的 div 可以變化。

語法:

<div onclick="newdiv0505.style='font-size: 32px; color: red; transform: rotate(10deg);'" style="border: 1px solid red;">
請按這裡。讓 javascript 的 div 可以變化。
</div>


當然,也可以選取用CSS寫出的物件。

這時,如何選取就非常重要了。選取的功能,就是你一定要會的。

下次談「選取」的操作。

給文科生的十四堂javascript課:改變style的參數

有一個div。你按下去就會更動style。

按下去改變style。直寫的方法。

語法:

<div style="border: 1px solid red;" onclick="this.style='color: red; background-color: lightgray; padding: 1em;'">

按下去改變style。直寫的方法。
</div>


再來是,你一定要會的function()的寫法,可以改變很多屬性參數。

你可以看到有兩個div。

我們使用this這一個寫法,比較直觀。

你按下去,div就會產生不同的變化。


第一個div。
第二個div。
語法:

<style>
.cla0504 {
background-color: gray;
margin-bottom: 1em;
}
</style>


<div class="cla0504" onclick="changetodiv(this, 'color:red; padding: 1em; border: 1px solid red; width: 20%;')">
第一個div。
</div>


<div class="cla0504" onclick="changetodiv(this, 'color:blue; padding: 2em; border: 1px solid green; width: 30%;')">
第二個div。
</div>

<script>
function changetodiv(elementdiv, chtostyle) {

elementdiv.style = chtostyle;

}
</script>


語法的原型:

<h3 onclick="myFunction(this, 'red')">Click me to change my color.</h3>

<script>
function myFunction(element, color) {
  element.style.color = color;
}
</script>



兩種寫法:

newdiv0502.onclick = function() {this.remove();};

document.getElementById("myBtn").onclick = function() {myFunction()};

function myFunction() {
document.getElementById("myDropdown").classList.toggle("show");
}