[Day05] - 新拟物风按钮(三) - 参数设定

昨天我们利用 shadow-dom 将元件内外的样式区隔开来

不过 , 目前的 neuomorphic-button 有个奇怪之处

我们没有办法直接指定按钮要用哪一个 icon , 只能用 document.querySelector

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

使用 JS 事後对 dom 做修改 , 对於健忘的人 (比如说我) 就很容易忘记加上 JS 修改的那段 , 或是忘记自己有设定过替换的 JS

然後 , 在不同的 JS 档案中做修改 , Dedug 时就会很头痛 (所以这 icon 最後会变成啥样啊 !?)

今天 , 我们先来接收外部传入的参数 , 将 icon 相关的设定 , 统一放在 neuomorphic-button 元件上 ( ̄︶ ̄*))


设定属性

追加 icon 属性到 neuomorphic-button 元件上 , 更改小图示

book Step 1. 在 <neuomorphic-button /> 上加上属性 icon

<!-- 将我们要显示的图标放的 icon 属性的文字当中 -->
<neuomorphic-button icon="fas fa-lightbulb" />

book Step 2. 在元件上的 icon 接收下来 , 并将其写到 i 的 class 上面

Pink Tree 利用 this.getAttribute('icon') 取得元件上的 icon 属性

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

  constructor() {

    super();

    const iconName = this.getAttribute('icon')    
    

    ...照旧处理
  }
}

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

book Step 3. 并接收到的 iconName 写到 i 的 class 上面

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

  constructor() {

        super();
    
        const fontAwesomeStyle = `<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css">`
    
        const styleStr = 'neuomorphic-button 的样式';

        // 取得原件上的 icon 属性
+        const iconName = this.getAttribute('icon')       

        const div = document.createElement('div')
        div.classList.add('icon-box')

        // 将取到的 iconName 设定给 i 
+        div.innerHTML = `<i class="${iconName}"></i>`
    
        const label = document.createElement('label')
        label.innerHTML = `<input type="checkbox">`
        label.append(div)
    
        const shadowRoot = this.attachShadow({mode: 'open'})
        shadowRoot.innerHTML = fontAwesomeStyle + styleStr
        shadowRoot.append(label)
  }
}

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

之後我们就可以到 font-awesome 官网查出我们想要的小图示 , 并修改 icon 属性

追加其他属性

我们可以利用以上手法 , 将

  • size : 按钮大小
  • color : 小图示颜色
  • bgColor : 按钮底色

这些常见的按钮控制项 , 给设定出来 , 这些设定就留给 邦友 自行实作了 !

参考资料 :


<<:  排线相机

>>:  [30天 Vue学好学满 DAY9] v-if & v-show

Day 30 消费者每天在变,广告没有尽头

经过 29 天的探讨,已经慢慢建立概念了无论是关键字或是广告的文案,基本上无论 Google Ads...

基金走势再现黑色星期五?白酒股集体受挫!

近期说到基金理财,每次关於基金的消息上热搜,大多是基民都会心里一颤,觉得肯定基金又双叒叕跌了。确实,...

视觉化KBARS(4)-controller

今天要来写controller的部分, (1)controller新称showOneMinKbar方...

【Day 25】建立 EKS on Outpost 的步骤(下)

tags: 铁人赛 AWS Outposts EKS Kubernetes 前情提要 昨天把 EKS...

【Day01】楔子-关於永丰金融APIs

iT邦帮忙一直以来都是我查询技术问题的好夥伴;而铁人赛为IT界名闻遐迩的年度盛事。 在友人极力鼓吹报...