gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

總結分享幾個 VueUse 最佳組合,快來收藏使用吧!

VueUse 是 Anthony Fu 的一個開源項目,它為 Vue 開發人員提供了大量適用于 Vue 2 和 Vue 3 的基本 Composition API 實用程序函數。本篇文章就來給大家分享幾個我常用的幾個 VueUse 最佳組合,希望對大家有所幫助!

總結分享幾個 VueUse 最佳組合,快來收藏使用吧!

(學習視頻分享:vue視頻教程)

Vueuse擁有大量出色的組合。但是量太大,要把它們全部看完可能會讓人抓不到重點。下面來介紹一些有用到的組合,它們如下:

  • onClickOutside

  • useFocusTrap

  • useHead

  • useStorage

  • useVModel

  • useImage

  • useDark

1、 onClickOutside

總結分享幾個 VueUse 最佳組合,快來收藏使用吧!

檢測點擊非常簡單。但是,當點擊發生在一個元素之外時,如何檢測?那就有點棘手了。但使用VueUse中的 onClickOutside 組件就很容易能做到這點。代碼如下:

<script setup> import { ref } from 'vue' import { onClickOutside } from '@vueuse/core'  const container = ref(null) onClickOutside(container, () => alert('Good. Better to click outside.')) </script>  <template>   <div>     <p>Hey there, here's some text.</p>     <div class="container" ref="container">       <p>Please don't click in here.</p>     </div>   </div> </template>

為想要追蹤的 container 元素創建一個 ref :

const container = ref(null);

然后我們用元素上的ref屬性把它變成一個模板ref

<div class="container" ref="container">   <p>Please don't click in here.</p> </div>

有了容器的ref 之后,我們把它和一個處理程序一起傳遞給onClickOutside組合。

onClickOutside(   container,   () => alert('Good. Better to click outside.') )

這種可組合對于管理窗口或下拉菜單很有用。當用戶點擊下拉菜單以外的地方時,你可以關閉它。

模態框也通常表現出這種行為。

事例地址:https://stackblitz.com/edit/vue3-script-setup-with-vite-18scsl?file=src%2FApp.vue

2、useFocusTrap

總結分享幾個 VueUse 最佳組合,快來收藏使用吧!

為了擁有可訪問的應用程序,正確地管理焦點非常重要。

沒有什么比不小心在模態后面加tab,并且無法將焦點返回到模態更糟糕的了。這就是焦點陷阱的作用。

將鍵盤焦點鎖定在一個特定的DOM元素上,不是在整個頁面中循環,而是在瀏覽器本身中循環,鍵盤焦點只在該DOM元素中循環。

下面是一個使用VueUse的useFocusTrap的例子:

<script setup> import { ref } from 'vue' import { useFocusTrap } from '@vueuse/integrations/useFocusTrap'  const container = ref(null) useFocusTrap(container, { immediate: true }) </script>  <template>   <div>     <button tab-index="-1">Can't click me</button>     <div class="container" ref="container">       <button tab-index="-1">Inside the trap</button>       <button tab-index="-1">Can't break out</button>       <button tab-index="-1">Stuck here forever</button>     </div>     <button tab-index="-1">Can't click me</button>   </div> </template>

immediate設置為true,頁面加載時,焦點將被放置在 container 元素中。然后,就不可能在該容器之外的地方做標簽。

到達第三個按鈕后,再次點擊tab鍵將回到第一個按鈕。

就像onClickOutside一樣,我們首先為 container 設置了模板ref

const container = ref(null)
<div class="container" ref="container">   <button tab-index="-1">Inside the trap</button>   <button tab-index="-1">Can't break out</button>   <button tab-index="-1">Stuck here forever</button> </div>

然后我們把這個模板引用傳遞給useFocusTrap組合。

useFocusTrap(container, { immediate: true });

immediate 選項將自動把焦點設置到容器內第一個可關注的元素上。

事例地址:https://stackblitz.com/edit/vue3-script-setup-with-vite-eocc6w?file=src%2FApp.vue

3、useHead

總結分享幾個 VueUse 最佳組合,快來收藏使用吧!

VueUse為我們提供了一種簡單的方法來更新我們應用程序的 head 部分–頁面 title、scripts和其他可能放在這里的的東西。

useHead 組合要求我們首先設置一個插件

import { createApp } from 'vue' import { createHead } from '@vueuse/head' import App from './App.vue'  const app = createApp(App) const head = createHead()  app.use(head) app.mount('#app')

一旦我們使用了這個插件,我們就可以隨心所欲地更新標題部分。在這個例子中,我們將在一個按鈕上注入一些自定義樣式。

<script setup> import { ref } from 'vue' import { useHead } from '@vueuse/head'  const styles = ref('') useHead({   // Inject a style tag into the head   style: [{ children: styles }], })  const injectStyles = () => {   styles.value = 'button { background: red }' } </script>  <template>   <div>     <button @click="injectStyles">Inject new styles</button>   </div> </template>

首先,我們創建一個ref來表示我們要注入的樣式,默認為空:

const styles = ref('');

第二,設置 useHead 將樣式注入到頁面中。

useHead({   // Inject a style tag into the head   style: [{ children: styles }], })

然后,添加注入這些樣式的方法:

const injectStyles = () => {   styles.value = 'button { background: red }' }

當然,我們并不局限于注入樣式。我們可以在我們的<head>中添加任何這些內容:

  • title

  • meta tags

  • link tags

  • base tag

  • style tags

  • script tags

  • html attributes

  • body attributes

事例地址:https://stackblitz.com/edit/vue3-script-setup-with-vite-szhedp?file=src%2FApp.vue

4、useStorage

useStorage真的很酷,因為它會自動將 ref 同步到 localstorage,事例如下:

<script setup> import { useStorage } from '@vueuse/core' const input = useStorage('unique-key', 'Hello, world!') </script>  <template>   <div>     <input v-model="input" />   </div> </template>

第一次加載時, input 顯示 'Hello, world!',但最后,它會顯示你最后在 input 中輸入的內容,因為它被保存在localstorage中。

除了 localstorage,我們也可以指定 sessionstorage:

const input = useStorage('unique-key', 'Hello, world!', sessionStorage)

當然,也可以自己實現存儲系統,只要它實現了StorageLike接口。

export interface StorageLike {   getItem(key: string): string | null   setItem(key: string, value: string): void   removeItem(key: string): void }

5、useVModel

v-model指令是很好的語法糖,使雙向數據綁定更容易。

useVModel更進一步,擺脫了一堆沒有人真正想寫的模板代碼。

<script setup> import { useVModel } from '@vueuse/core'  const props = defineProps({   count: Number, }) const emit = defineEmits(['update:count'])  const count = useVModel(props, 'count', emit) </script>  <template>   <div>     <button @click="count = count - 1">-</button>     <button @click="count = 0">Reset to 0</button>     <button @click="count = count + 1">+</button>   </div> </template>

在這個例子中,我們首先定義了要附加到v-model上的 props:

const props = defineProps({   count: Number, })

然后我們發出一個事件,使用v-model的命名慣例update:<propName>:

const emit = defineEmits(['update:count'])

現在,我們可以使用useVModel組合來將 prop和事件綁定到一個ref

const count = useVModel(props, 'count', emit)

每當 prop 發生變化時,這個 count 就會改變。但只要它從這個組件中被改變,它就會發出update:count事件,通過v-model指令觸發更新。

我們可以像這樣使用這個 Input 組件。

<script setup> import { ref } from 'vue' import Input from './components/Input.vue'  const count = ref(50) </script>  <template>   <div>     <Input v-model:count="count" />     {{ count }}   </div> </template>

這里的count ref是通過v-model綁定與 Input組件內部的count ref同步的。

事例地址:https://stackblitz.com/edit/vue3-script-setup-with-vite-ut5ap8?file=src%2FApp.vue

6、useImage

總結分享幾個 VueUse 最佳組合,快來收藏使用吧!

隨著時間的推移,web應用中的圖像變得越來越漂亮。我們已經有了帶有srcset的響應式圖像,漸進式加載庫,以及只有在圖像滾動到視口時才會加載的庫。

但你知道嗎,我們也可以訪問圖像本身的加載和錯誤狀態?

我以前主要通過監聽每個HTML元素發出的onloadonerror事件來做到這一點,但VueUse給我們提供了一個更簡單的方法,那就是useImage組合。

<script setup> import { useImage } from '@vueuse/core'  // Change this to a non-existent URL to see the error state const url = 'https://source.unsplash.com/random/400x300' const { isLoading, error } = useImage(   {     src: url,   },   {     // Just to show the loading effect more clearly     delay: 2000,   } ) </script>  <template>   <div>     <div v-if="isLoading" class="loading gradient"></div>     <div v-else-if="error">Couldn't load the image :(</div>     <img v-else :src="url" />   </div> </template>

第一步,通過useImage 設置圖片的src:

const { isLoading, error } = useImage({ src: url })

獲取它返回的isLoadingerror引用,以便跟蹤狀態。這個組合在內部使用useAsyncState,因此它返回的值與該組合的值相同。

安排好后,useImage 就會加載我們的圖像并將事件處理程序附加到它上面。

我們所要做的就是在我們的模板中使用相同的URL來使用該圖片。由于瀏覽器會重復使用任何緩存的圖片,它將重復使用由useImage加載的圖片。

<template>   <div>     <div v-if="isLoading" class="loading gradient"></div>     <div v-else-if="error">Couldn't load the image :(</div>     <img v-else :src="url" />   </div> </template>

在這里,我們設置了一個基本的加載和錯誤狀態處理程序。當圖片正在加載時,我們顯示一個帶有動畫漸變的占位符。如果有錯誤,我們顯示一個錯誤信息。否則我們可以渲染圖像。

UseImage 還有其他一些很棒的特性!如果想讓它成為響應式圖像,那么它支持srcsetsizes屬性,這些屬性在幕后傳遞給img元素。

如果你想把所有內容都放在模板中,還有一個無渲染組件。它的工作原理與組合的相同:

<template>     <UseImage src="https://source.unsplash.com/random/401x301">     <template #loading>             <div class="loading gradient"></div>         </template>     <template #error>             Oops!         </template>   </UseImage> </template>

事例:https://stackblitz.com/edit/vue3-script-setup-with-vite-d1jsec?file=src%2FApp.vue

7、暗黑模式 useDark

總結分享幾個 VueUse 最佳組合,快來收藏使用吧!

最近,每個網站和應用程序似乎都有暗黑模式。最難的部分是造型的改變。但是一旦你有了這些,來回切換就很簡單了。

如果你使用的是Tailwind,你只需要在html元素中添加dark類,就可以在整個頁面中啟用。

<html class="dark"><!-- ... --></html>

然而,在黑暗模式和光明模式之間切換時,有幾件事需要考慮。首先,我們要考慮到用戶的系統設置。第二,我們要記住他們是否已經推翻了這個選擇。

VueUse的useDark組合性為我們把所有這些東西都包起來。默認情況下,它查看系統設置,但任何變化都會被持久化到localStorage,所以設置會被記住。

<script setup> import { useDark, useToggle } from '@vueuse/core'  const isDark = useDark() const toggleDark = useToggle(isDark) </script>  <template>   <div class="container">     Changes with dark/light mode.      <button @click="toggleDark()">             Enable {{ isDark ? 'Light' : 'Dark' }} Mode         </button>   </div> </template>

黑暗模式的樣式:

.dark .container {   background: slategrey;   color: white;   border-color: black; }  .dark button {   background: lightgrey;   color: black; }  .dark body {   background: darkgrey; }

如果你沒有使用Tailwind,你可以通過傳入一個選項對象來完全定制黑暗模式的應用方式。下面是默認的Tailwind:

const isDark = useDark({   selector: 'html',   attribute: 'class',   valueDark: 'dark',   valueLight: '', })

也可以提供一個onChanged處理程序,這樣你就可以編寫任何你需要的Javascript。這兩種方法使你可以使它與你已有的任何造型系統一起工作。

總結

Vueuse 擁有一個巨大的庫,其中包含出色的組合,而我們在這里只涵蓋了其中的一小部分。我強烈建議你花些時間去探索這些文檔,看看所有可用的東西。這是一個非常好的資源,它將使你免于大量的模板代碼和不斷地重新發明車輪。

【相關視頻教程推薦:vuejs入門教程、web前端入門】

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
日韩精品一区二区三区电影| 欧美一级视频在线| | 亚洲精品自拍网| 男人和女人啪啪网站| 玖玖精品在线视频| 99精品视频国产| 中文字幕久久av| 一区二区三区视频在线观看免费| 欧美一级视频在线播放| 91嫩草国产丨精品入口麻豆| 中文字幕一区二区在线观看视频| 手机看片福利日韩| 黄色片久久久久| 免费高清在线观看免费| 秋霞无码一区二区| 五十路熟女丰满大屁股| 日本日本19xxxⅹhd乱影响| 男女啪啪免费视频网站| www一区二区www免费| 欧美久久久久久久久久久久久| 国产一区二区片| 欧美精品在欧美一区二区| 日韩精品综合在线| 国产无限制自拍| 国产原创popny丨九色| 一女被多男玩喷潮视频| 女性女同性aⅴ免费观女性恋 | 日本手机在线视频| 久久久性生活视频| 国产精品无码一区二区在线| 777久久久精品一区二区三区| 日韩一级片播放| 青青在线免费视频| bt天堂新版中文在线地址| 欧美亚洲黄色片| 国产深夜男女无套内射| 日韩人妻无码精品久久久不卡| 国产又大又黄又猛| 成人亚洲免费视频| 17c丨国产丨精品视频| 一区二区传媒有限公司| 天天干天天干天天干天天干天天干| 亚洲色图偷拍视频| 50度灰在线观看| 久久精品国产精品亚洲色婷婷| 性欧美极品xxxx欧美一区二区| 不卡的在线视频| 免费网站在线观看视频| av无码精品一区二区三区| 五月天国产视频| 无码aⅴ精品一区二区三区浪潮| 日韩一级免费片| 国产亚洲黄色片| 在线免费观看av的网站| 亚洲国产精品影视| 欧美爱爱视频免费看| 亚洲男人天堂2021| 丰满爆乳一区二区三区| 国产传媒免费观看| 欧美视频在线播放一区| gogogo免费高清日本写真| 免费在线观看亚洲视频 | 不卡的av中文字幕| 东北少妇不带套对白| 中文字幕亚洲欧洲| 日韩国产欧美亚洲| 亚洲综合伊人久久| 熟妇人妻va精品中文字幕| 黄色小视频大全| 在线一区二区不卡| 日本888xxxx| 色欲av无码一区二区人妻| 18视频在线观看娇喘| 三级视频中文字幕| 99热在线这里只有精品| wwwwww欧美| 91大神免费观看| 日本激情综合网| 日韩视频第二页| 日本午夜激情视频| 一二三在线视频| 男人午夜视频在线观看| 手机看片福利日韩| 宅男噜噜噜66国产免费观看| 色欲色香天天天综合网www| 欧美 亚洲 视频| www.-级毛片线天内射视视| www.五月天色| 亚洲人辣妹窥探嘘嘘| 日本男人操女人| 日本wwww视频| 97成人在线观看视频| a在线视频观看| 国产精品裸体瑜伽视频| 青草网在线观看| 中文精品无码中文字幕无码专区| 久久人人爽人人片| 中文字幕第一页亚洲| 久久综合在线观看| 国产一区一区三区| 在线观看18视频网站| 97在线免费视频观看| 亚洲国产一二三精品无码| 久久免费一级片| 97在线国产视频| 久久国产成人精品国产成人亚洲| 乱妇乱女熟妇熟女网站| 国产av无码专区亚洲精品| 国产女女做受ⅹxx高潮| 国产免费999| 涩涩网站在线看| 福利在线小视频| 999一区二区三区| 日本精品免费在线观看| 日日噜噜噜噜久久久精品毛片| 亚洲老女人av| 一区二区三区国产好的精华液| 欧美与动交zoz0z| 欧美日韩不卡在线视频| 好男人www社区| 国产又大又长又粗又黄| 国产精品一二三在线观看| 国产又粗又猛又爽又黄的网站 | www.-级毛片线天内射视视| 国产高清av在线播放| 欧美成人黑人猛交| 亚洲精品成人在线播放| 无码av天堂一区二区三区| 熟女少妇精品一区二区| 熟女视频一区二区三区| 狠狠干 狠狠操| 国产一区二区在线观看免费视频| 喜爱夜蒲2在线| 九热视频在线观看| 国产一区二区三区在线免费| 久久久久久久久久久视频| 亚洲理论中文字幕| av动漫在线看| 国产免费一区二区三区四在线播放 | 妞干网这里只有精品| av免费中文字幕| 国产精品h视频| 欧美牲交a欧美牲交aⅴ免费下载| 1314成人网| 免费日韩中文字幕| 今天免费高清在线观看国语| 激情视频综合网| cao在线观看| 手机在线视频你懂的| 欧美日韩在线免费播放| www.av片| 黑人巨茎大战欧美白妇 | 国产又大又黄又粗又爽| www..com日韩| 国产乱子伦精品视频| 成人av毛片在线观看| 欧美色图另类小说| 人人妻人人澡人人爽欧美一区| 黄色三级视频在线| 国产三区在线视频| 国产a级片网站| 男女裸体影院高潮| 免费不卡av网站| 久久国产精品国产精品| 四虎永久在线精品无码视频| 一本久道高清无码视频| a级片一区二区| 日韩人妻精品一区二区三区| 91亚洲免费视频| 久久9精品区-无套内射无码| 欧美激情视频免费看| 国产美女主播在线| 一本色道久久88亚洲精品综合| 香蕉视频xxxx| 亚洲综合123| 手机成人av在线| 欧美少妇一级片| 国产在线拍揄自揄拍无码| 日本精品免费视频| 国产1区2区3区中文字幕| 超碰97在线看| 轻点好疼好大好爽视频| 日韩网站在线免费观看| 久操手机在线视频| 极品粉嫩国产18尤物| 两根大肉大捧一进一出好爽视频| 免费av手机在线观看| 国产黄色一级网站| 日本女优爱爱视频| www.亚洲高清| 国产xxxxhd| 人妻无码一区二区三区四区| 国产一级黄色录像片| 青青草综合视频| 欧美视频在线观看网站| 欧美视频第一区| 日本人69视频| 黄色www在线观看| 久久久久久久久久网|