巧用 pointer-events 只給偽元素加點(diǎn)擊事件

給元素加上 pointer-events:none; 的 CSS 屬性即可禁止鼠標(biāo)點(diǎn)擊, 值得注意的是, 只能禁止鼠標(biāo)事件, 鍵盤事件等不能禁止.

一. 需求描述:

  1. 有一個(gè)輸入框, 輸入內(nèi)容按回車鍵之后輸入的內(nèi)容即時(shí)顯示在頁面上;
  2. 當(dāng)沒有輸入過內(nèi)容時(shí), 顯示 nothing~ 提示語;
  3. 按回車后, 輸入框的內(nèi)容清空;
  4. 頁面上顯示的每一項(xiàng)內(nèi)容可以通過一個(gè)刪除按鈕刪除.

二. 決定使用 CSS3 的偽類和偽元素

  1. 提示語使用 :empty, 當(dāng)父元素里面沒有內(nèi)容時(shí), 會(huì)自動(dòng)應(yīng)用這個(gè)樣式:
.wrapper {
    margin: 100px;
}

ul:empty::after {
    content: 'nothing~';
}

<div class="wrapper">
    <input type="text" id='input'>
    <ul id='ul'></ul> 
</div>


注意: ul 不能有空格, 空格也算是子元素.

  1. 利用 JavaScript 的 onkeydown 事件判斷回車事件, 將輸入框里的內(nèi)容追加到 ul 中, 給每一項(xiàng) li 添加 ::after 偽元素, 設(shè)計(jì)它的樣式為一個(gè)按鈕的樣子:

#ul {
    display: flex;
    flex-direction: column;
    width: 200px;
    padding: 2px;
    list-style: none;
    text-decoration: none;
}

#ul>li {
    margin: 5px 0;
    pointer-events: none;
}

#ul>li::after {
    pointer-events: auto;
    content: '×';
    float: right;
    width: 15px;
    height: 15px;
    margin: 0 -20px;
    padding: 2px 4px;
    text-align: center;
    line-height: 15px;
    color: #505739;
    background-color: #eae0c2;
    background: linear-gradient(to bottom, #eae0c2 5%, #ccc2a6 100%);
    border-radius: 5px;
    box-shadow: 0px 0px 2px -1px #1c1b18;
    text-shadow: 0px 1px 0px #ffffff;
    cursor: pointer;
}

#ul>li:hover::after {
    background-color: #ccc2a6;
    background: linear-gradient(to bottom, #ccc2a6 5%, #eae0c2 100%);
}

<script>
let oInput = document.getElementById('input');

let oUl = document.getElementById('ul');

oInput.onkeydown = function (e) {
    let value = oInput.value;
    if (e.keyCode === 13) {
        oUl.innerHTML += `<li>${value}</li>`;
        oInput.value = '';
    }
}

oUl.onclick = function (e) {
    if (e.target.nodeName === 'LI') {
        oUl.removeChild(e.target);
    }
}
</script>
  1. 注意 pointer-events 的使用
    本來, 未使用 pointer-events 之前, 當(dāng)點(diǎn)擊 li 這一項(xiàng)任何位置都會(huì)通過 removeChild(e.target) 移除這一項(xiàng), 我只是想在點(diǎn)擊設(shè)計(jì)的按鈕時(shí)刪除這一項(xiàng), 將 li 應(yīng)用 pointer-events: none; 禁止響應(yīng)鼠標(biāo)的點(diǎn)擊事件, li::after 應(yīng)用 pointer-events: auto; 解除禁止響應(yīng), 便可以在只點(diǎn)擊偽元素的時(shí)候刪除 li .
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 總結(jié): 鼠標(biāo)事件 1.click與dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r閱讀 1,719評(píng)論 2 10
  • (續(xù)jQuery基礎(chǔ)(1)) 第5章 DOM節(jié)點(diǎn)的復(fù)制與替換 (1)DOM拷貝clone() 克隆節(jié)點(diǎn)是DOM的常...
    凜0_0閱讀 1,511評(píng)論 0 8
  • 第1章 鼠標(biāo)事件 1-1 jQuery鼠標(biāo)事件之click與dbclick事件 用交互操作中,最簡(jiǎn)單直接的操作就是...
    mo默22閱讀 1,345評(píng)論 0 6
  • 陳偉霆參加《一年級(jí)》,昨天,《一年級(jí)》節(jié)目組爆出了一組陳偉霆和學(xué)員們的素顏合照,正好就確定了本周wuli大西轟將會(huì)...
    小之哩閱讀 211評(píng)論 0 1
  • 1.安全、美觀并重。改善紋路,增加凹凸圖案,增強(qiáng)摩擦力 2.明確行政主體責(zé)任與管轄范疇,標(biāo)示清晰,易區(qū)分 3.設(shè)計(jì)...
    1990工作室閱讀 175評(píng)論 0 0

友情鏈接更多精彩內(nèi)容