zoukankan      html  css  js  c++  java
  • [CSS 3] Enabling CSS manipulation inside the shadow DOM using the part pseudo class

    The part pseudo class allows consumers of a web component to manipulate certain key elements inside the Shadow DOM. In this lesson we will explore two use cases to using the part pseudo class.

    const employeesTemplate = document.querySelector('#employees-custom-element');
    
    class EmployeesComponent extends HTMLElement {
      cards;
    
      constructor() {
        super();
        this.attachShadow({ mode: 'open' });
        this.shadowRoot.appendChild(employeesTemplate.content.cloneNode(true));
        this.cards = [...this.shadowRoot.querySelectorAll('.card')];
      }
    
      connectedCallback() {
        this.cards.forEach((card, index) => {
          card.addEventListener('click', (e) => {
            const name = card.querySelector('h4').innerText;
            const role = card.querySelector('p').innerText;
            const selectionEvent = new CustomEvent('cardSelection', {
              bubbles: true, composed: true, detail: { index, name, role }
            });
            this.dispatchEvent(selectionEvent);
          });
        });
      }
    
      toggleSelected(cardIndex) {
        const card = this.cards[cardIndex];
        const oldAttributeValue = card.getAttribute('part');
        if (oldAttributeValue.indexOf('selected') === -1) {
          card.setAttribute('part', `${oldAttributeValue} selected`);
        } else {
          card.setAttribute('part', `${oldAttributeValue.replace('selected', '')}`);
        }
      }
    }
    
    customElements.define(employeesTemplate.id, EmployeesComponent);
    const employeesComponent = document.querySelector(employeesTemplate.id);
    let selectedCard;
    
    const element = employeesComponent.addEventListener('cardSelection', (e) => {
        const {index: cardIndex, name, role} = e.detail;
        employeesComponent.toggleSelected(cardIndex);
        if (selectedCard) employeesComponent.toggleSelected(selectedCard.index);
        selectedCard = e.detail;
    });
    employees-custom-element::part(card) {
        background: rgba(0, 0, 50, .5);
    }
    
    employees-custom-element::part(selected) {
        background: rgba(255, 0, 0, .5);
    }
  • 相关阅读:
    js随机生成
    黑客代码雨效果
    HTML5 <details> 标签
    fieldset标签——使用(很少使用)
    jQuery总结
    vue element Cascader 级联选择器 选择任意一级选项 点击收起,点击label选中等问题详解
    Vue、element-ui的resetFields()方法重置表单无效问题及解决办法
    常用正则表达式(字符)
    一、日常经验记录
    python-opencv学习第二章
  • 原文地址:https://www.cnblogs.com/Answer1215/p/13899555.html
Copyright © 2011-2022 走看看