iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0
Modern Web

Web Component 網頁元件之路系列 第 3

[Day03] - 第一個 WebComponent 元件

  • 分享至 

  • xImage
  •  

昨天借用了 Wired Elements 來說明什麼是 WebComponent 跟它有什麼特點

今天我們來製作一個 MyElement 吧 !


素材準備

我們利用 font-awesome 製作一個 擬物型按鈕(neuomorphic button) 吧 ( ̄︶ ̄*))


[ 圖片來源 : youtube 影片 - CSS3 Neumorphism ]

首先 , 當然是建立一個 JS 檔案 , 我們叫做 neuomorphic-button.js 吧 !

// neuomorphic-button.js

建立一下我們的 Custom Html Tag

// neuomorphic-button.js
class NeuomorphicButton extends HTMLElement {

  // as Component mounted to page 
  constructor() {

    // Always call super first in constructor
    super();

    // Element functionality written in here
  }
}

window.customElements.define('neuomorphic-button', NeuomorphicButton);

跟昨天一樣 , 在 Html 中引用自製的 Tag

<!-- use-wc.html -->
<!DOCTYPE html>
<html lang="zh-TW">
<head>
  <meta charset="UTF-8">
  <script src="./neuomorphic-button.js"></script>
</head>
<body>

<neuomorphic-button></neuomorphic-button>
</body>
</html>

我們先塞一些東西到 看看吧 !

// neuomorphic-button.js
class NeuomorphicButton extends HTMLElement {

  // as Component mounted to page 
  constructor() {

    // Always call super first in constructor
    super();

    // Element functionality written in here
    const img = document.createElement('img')
    img.src = 'https://raw.githubusercontent.com/andrew781026/ithome_ironman_2021/master/day-03/cat.png'
    
    this.append(img)
  }
}

window.customElements.define('neuomorphic-button', NeuomorphicButton);

回到 use-wc.html 我們可以看到一隻可愛的小貓咪 (* ̄3 ̄)╭

之後 , 我們將 img 改成 font-awesome 的 icon

// neuomorphic-button.js
class NeuomorphicButton extends HTMLElement {

  // as Component mounted to page 
  constructor() {

    // Always call super first in constructor
    super();

    // Element functionality written in here
    const div = document.createElement('div')
    div.innerHTML = `<i class="fas fa-wifi"></i>`
    
    this.append(div)
  }
}

window.customElements.define('neuomorphic-button', NeuomorphicButton);

別忘了在 use-wc.html 中引入 font-awesome 的樣式檔

<!-- use-wc.html -->
<!DOCTYPE html>
<html lang="zh-TW">
<head>
  <meta charset="UTF-8">
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css">
  <script src="./neuomorphic-button.js"></script>
</head>
<body>

<neuomorphic-button></neuomorphic-button>
</body>
</html>

之後再補上 NeuomorphicButton 的邊框樣式 . 底色...等

<!-- use-wc.html -->
<!DOCTYPE html>
<html lang="zh-TW">
<head>
  <meta charset="UTF-8">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css">

  <style>
 
      .icon-box {
       width: 60px;
       height: 60px;
       position:relative;
       background-color: #ebf5fc;
       box-shadow:  8px 8px 16px #bcbcbc,
                   0 0 8px 20px #dfe9f3,
                   -8px -8px 16px #ffffff;
       display: flex;
       justify-content: center;
       align-items: center;
       border-radius: 10px;
       cursor: pointer;
     }
 
      .icon-box i {
       font-size: 2em;
       color: #6a9bd8;
     }
 
   </style>

  <script src="./neuomorphic-button.js"></script>
</head>
<body>

<neuomorphic-button></neuomorphic-button>
</body>
</html>

我們的 neuomorphic-button 就顯示出來啦

如果想查看實際頁面 , 請到 first-web-component.html 查看

如果你想替換裡面的 icon , 可用下方 JS 做置換

var myTagName = 'neuomorphic-button';
document.querySelector(`${myTagName} .icon-box i`).className = 'fas fa-lightbulb'

參考資料 :


上一篇
[Day02] - 旅途開始前的行前解說
下一篇
[Day04] - 新擬物風按鈕(二) - shadow dom 介紹
系列文
Web Component 網頁元件之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言