成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

查漏補缺,盤點和Toggle相關的幾個API

開發 前端
Toggle作用在DOMTokenList上,通常是ClassList , ClassList.toggle可以切換Class,Toggle還支持第二個參數,用于強制添加或者移出某個Class,ToggleAttribute可以控制屬性的切換。

toggle的意思很簡單,表示“切換”,適用于兩個狀態之間的變化,不會出現第三者,就像這樣。

web 中也有很多類似的api,一起看看有哪些吧。

一、toggle

首先是最常用的DOMTokenList.toggle方法,這里的的DOMTokenList表示一組空格分隔的標記,最常見的就是Element.classList,比如。

除了classList還有relList,不過應該更少見了。

<div class="a b c"></div>

通過el.classList可以獲取到 class 的詳細信息。

看著像一個數組一樣,然后我們可以通過toggle方法去切換某個class,比如:

el.classList.toggle('a'); // 移除 a
el.classList.toggle('a'); // 添加 a

此時會動態去判斷,如果存在就移除,如果不存在就添加,再也不需要去判斷當前狀態了。

比如要切換頁面主題,可以直接這樣。

// 深淺切換
btn.onclcik = () => {
  document.body.classList.toggle('dark')
}

// 無需像這樣
if (當前是深色) {
  設置為淺色
} else {
  設置為深色
}

另外,toggle還支持第二個參數,表示強制,是一個布爾值,為 true表示添加,反之為移除,而「不管當前是什么狀態」。

el.classList.toggle('a', force);

比如:

// 設置為淺色
btnLight.onclcik = () => {
  document.body.classList.toggle('dark', false)
}
// 設置為深色
btnDark.onclcik = () => {
  document.body.classList.toggle('dark', true)
}

是不是非常方便呢?

二、toggleAttribute

還有一個和toggle比較類似的是toggleAttribute,顧名思義,這個是用來切換「屬性」的,語法和前面一致。

toggleAttribute(name)
toggleAttribute(name, force)

這個使用場景更為廣泛,例如控制一個輸入框的禁用與開啟。

input.toggleAttribute('disabled')

當然對于表單元素,還可以用.的方式直接設置。

input.disabled = !input.disabled;

但是,對于普通自定義屬性,就不能用這種方式了,比如黑暗模式,用屬性來控制。

document.body.toggleAttribute('dark');

第二個參數也是類似的。

document.body.toggleAttribute('dark', ture); //添加dark屬性
document.body.toggleAttribute('dark', false);//移除dark屬性

當然你還可以用更常規的方式。

document.body.setAttribute('dark', ''); //添加dark屬性
document.body.removeAttribute('dark');//移除dark屬性

個人覺得不如toggleAttribute優雅,你覺得呢?

三、togglePopover

togglePopover是新出來的,是針對popover元素推出的打開與關閉的方法。

關于popover,可以參考我之前寫的這篇文章:原生 popover 終于來了!

語法略有差異,因為無需修改其他狀態,所以只有一個可選參數。

popoverEl.togglePopover(); //切換 popover
popoverEl.togglePopover(true); //打開 popover
popoverEl.togglePopover(false); //關閉 popover

另外,帶有的參數的情況下還有更直觀的 api,推薦使用。

// 打開
popoverEl.togglePopover(true)
// 等同于
popoverEl.showPopover()

// 關閉
popoverEl.togglePopover(false)
// 等同于
popoverEl.hidePopover()

比較新,是跟著popver一起出現的,兼容性如下:

四、toggle event

最后再來介紹一個toggle事件,表示監聽切換事件。

這個也是跟隨poperver推出的,可以通過event對象獲取當前的新狀態和舊狀態,如下:

popover.addEventListener("toggle", (event) => {
  if (event.newState === "open") {
    console.log("Popover has been shown");
  } else {
    console.log("Popover has been hidden");
  }
});

效果如下:

有意思的是,這個事件同時也支持details元素。

details.addEventListener("toggle", (event) => {
  
});

五、總結一下

以上就是 web 中幾個和toggle相關的api了,下面總結一下:

  • toggle作用在DOMTokenList上,通常是classList , classList.toggle可以切換class。
  • toggle還支持第二個參數,用于強制添加或者移出某個class。
  • toggleAttribute可以控制屬性的切換。
  • togglePopver是專門推出用于控制popover元素打開和關閉的方法。
  • toggle event可以監聽popover元素和details元素的打開和關閉事件。
責任編輯:姜華 來源: 前端偵探
相關推薦

2021-03-04 08:26:17

synchronizeReentrantLojava

2021-03-08 08:03:44

注解Spring配置

2020-06-02 16:30:20

Redis數據庫字符串

2018-12-05 10:44:41

Redis缺點程序員

2021-03-17 13:44:14

隱私信息安全手機

2019-09-24 09:46:35

Tomcat連接器Lifecycle

2023-10-09 08:31:19

2018-04-04 09:00:00

區塊鏈X即服務微軟

2022-02-17 10:56:33

Redis數據系統

2022-09-21 16:25:17

Redis性能

2021-03-17 10:20:14

網絡安全網絡安全技術周刊

2025-03-25 10:49:13

2009-07-01 18:46:26

2024-05-06 12:52:30

2024-01-24 13:40:45

2021-02-27 17:13:21

前端代碼邏輯

2021-08-29 07:48:16

Golang開發

2021-11-23 23:21:49

SQL Serve數據庫腳本

2024-04-30 10:08:00

Lombok開發字段

2024-10-18 11:29:15

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本成人中文字幕在线观看 | 在线看亚洲 | 日韩在线精品 | 日韩欧美一区二区三区免费看 | 欧美456 | 99精品亚洲国产精品久久不卡 | av成人在线观看 | 国外成人免费视频 | 精品无码久久久久久久动漫 | 国产黄色在线观看 | 91 视频网站 | 激情伊人网| 亚洲欧美日本在线 | 日本一区二区不卡 | 国产探花在线精品一区二区 | 久久久久久久国产精品视频 | 久久综合一区 | www.99精品 | 日韩午夜在线观看 | 欧美一区二区三区在线观看 | 视频一区在线观看 | 91国内产香蕉 | 精品视频一区二区 | 国产免费福利小视频 | 婷婷丁香综合网 | 成人亚洲精品久久久久软件 | 久久精品99国产精品日本 | 国产一区二区久久久 | 亚洲国产精品一区二区三区 | 欧美一级高潮片免费的 | 日韩欧美一区二区在线播放 | 亚洲精品天堂 | 国产精品国产a级 | 97精品久久 | 欧美二区在线 | 欧美日韩理论 | 亚洲精品欧美精品 | 亚洲综合一区二区三区 | 国产精品视频二区三区 | 中文字幕1区| 成人免费网站 |