iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0

https://ithelp.ithome.com.tw/upload/images/20240804/201441136AYmXBmxde.png

主題

利用 JS 去改變 CSS 變數的值

成果

完整程式碼
Demo效果

實作重點

CSS

偽類::root 表示 <html> (MDN)元素,裡面可以存放 Css 的變數。定義變數時要加 --,使用時要加 var

:root {
  --base: #ffc600;
}
img {
  background: var(--base);
}

Javascript

  1. 類陣列(NodeList,MDN) : 使用 querySelectorAll 得出來的東西, console 去看它會很像陣列,但是仔細看它的 Prototype 裡面只有一些方法可以使用,這個主題使用 forEach

    const inputs = document.querySelectorAll('.controls input');
    console.log("inputs",inputs);
    
  2. input 效果:使用 change 可以更換值, 想要動態效果使用 mousemove

    inputs.forEach((input) => {
      input.addEventListener('change', changeHandler)
      input.addEventListener('mousemove', changeHandler)
    })
    
  3. 資料改動畫面:

    1. 製作上面的 callback changeHandler

      function changeHandler() {}
      
    2. 變數修改值:因為 spacingblur 後面要加 px,所以先在 input 綁上 data-(自定義) 的值,之後在 js 裡加上去。

      <!-- HTML 設定: data-sizing="px" -->
      <input id="spacing" type="range" name="spacing" min="10" max="200" value="10" data-sizing="px">
      
      <!-- HTML 設定: this.dataset.sizing -->
      <script>
                     // 取得有 dataset 沒有就回傳 ''
      	const suffix = this.dataset.sizing || '';
      </script>
      
    3. 使用 setProperty 去呼叫,前面放屬性名稱,後面放值

      MDN 語法:

      //                 CSS 屬性    新的属性值 可以放 "important" CSS 優先级
      style.setProperty(propertyName, value, priority);
      

額外知識

  1. :root 有三種呈現的方式,分別是 document.querySelector('html')document.querySelector(':root')document.documentElement

  2. NodeList 與 Array 方法

    const inputs = document.querySelectorAll('.controls input');
    console.log("inputs",inputs);
    
    const arr = [1,2,3]
    console.log("arr",arr);
    

    NodeList

    https://ithelp.ithome.com.tw/upload/images/20240804/20144113SCG5h14bFX.jpg

    arr
    https://ithelp.ithome.com.tw/upload/images/20240804/20144113Ea8eoRIVxS.jpg


上一篇
【Day03】02 - JS and CSS Clock
下一篇
【Day05】04 - Array Cardio Day 1
系列文
AI 時代,基礎要有:JavaScript30 打下紮實基礎7
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言