成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

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

Vue3如何操作dom?四種方式介紹

Vue如何操作dom?下面本篇文章給大家介紹一下Vue3中操作dom的四種方式,希望給大家有所幫助!

Vue3如何操作dom?四種方式介紹

前端(vue)入門到精通課程:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調試工具:點擊使用

最近產品經理提出了很多用戶體驗優化的需求,涉及到很多dom的操作。

小張:“老鐵,本來開發Vue2項目操作dom挺簡單的,現在開發vue3項目,突然感覺一頭霧水!”

我:“沒事,原理都差不多,查查資料應該沒問題的!”

至此將Vue3中dom操作常見的幾種方式總結一下?。▽W習視頻分享:vue視頻教程)

通過ref直接拿到dom引用

<template>     <div>         <div ref="sectionRef"></div>     </div> </template>  <script setup> import {ref} from 'vue' const sectionRef = ref() </script>
登錄后復制

通過對div元素添加了ref屬性,為了獲取到這個元素,我們聲明了一個與ref屬性名稱相同的變量sectionRef,然后我們通過 sectionRef.value 的形式即可獲取該div元素。

適用場景

單一dom元素或者個數較少的場景

Vue3如何操作dom?四種方式介紹

示例代碼

<template>     <div>         <p>通過ref直接拿到dom</p>         <div ref="sectionRef"></div>         <button @click="higherAction">變高</button>     </div> </template>  <script setup> import {ref} from 'vue' const sectionRef = ref() let height = 100;  const higherAction = () => {     height += 50;     sectionRef.value.style = `height: ${height}px`; } </script>  <style scoped> .demo1-container {     width: 100%;     height: 100%;      .ref-section {         width: 200px;         height: 100px;         background-color: pink;         transition: all .5s ease-in-out;     }      .btn {         width: 200px;         height: 50px;         background-color: gray;         color: #fff;         margin-top: 100px;     } } </style>
登錄后復制

通過父容器的ref遍歷拿到dom引用

<template>     <div>         <div ref="listRef">             <div @click="higherAction(index)" v-for="(item, index) in state.list" :key="index">                 <span>{{item}}</span>             </div>         </div>     </div> </template>  <script setup> import { ref, reactive } from 'vue' const listRef = ref()
登錄后復制

通過對父元素添加了ref屬性,并聲明了一個與ref屬性名稱相同的變量listRef,此時通過listRef.value會獲得包含子元素的dom對象

Vue3如何操作dom?四種方式介紹

此時可以通過listRef.value.children[index]的形式獲取子元素dom

適用場景

通過v-for循環生成的固定數量元素的場景

Vue3如何操作dom?四種方式介紹

示例代碼

<template>     <div>         <p>通過父容器遍歷拿到dom</p>         <div ref="listRef">             <div @click="higherAction(index)" v-for="(item, index) in state.list" :key="index">                 <span>{{item}}</span>             </div>         </div>     </div> </template>  <script setup> import { ref, reactive } from 'vue' const listRef = ref() const state = reactive({     list: [1, 2, 3, 4, 5, 6, 7, 8] })  const higherAction = (index: number) => {     let height = listRef.value.children[index].style.height ? listRef.value.children[index].style.height : '20px';     height = Number(height.replace('px', ''));     listRef.value.children[index].style = `height: ${height + 20}px`; } </script>  <style scoped> .demo2-container {     width: 100%;     height: 100%;      .list-section {         width: 200px;         .list-item {             width: 200px;             height: 20px;             background-color: pink;             color: #333;             transition: all .5s ease-in-out;             display: flex;             justify-content: center;             align-items: center;         }     } } </style>
登錄后復制

通過:ref將dom引用放到數組中

<template>     <div>         <div>             <div :ref="setRefAction" @click="higherAction(index)" v-for="(item, index) in state.list" :key="index">                 <span>{{item}}</span>             </div>         </div>     </div> </template>  <script setup> import { reactive } from 'vue'  const state = reactive({     list: [1, 2, 3, 4, 5, 6, 7],     refList: [] as Array<any> })  const setRefAction = (el: any) => {     state.refList.push(el); } </script>
登錄后復制

通過:ref循環調用setRefAction方法,該方法會默認接收一個el參數,這個參數就是我們需要獲取的div元素

Vue3如何操作dom?四種方式介紹

此時可以通過state.refList[index]的形式獲取子元素dom

適用場景

通過v-for循環生成的不固定數量或者多種元素的場景

Vue3如何操作dom?四種方式介紹

示例代碼

<template>     <div>         <p>通過:ref將dom引用放到數組中</p>         <div>             <div :ref="setRefAction" @click="higherAction(index)" v-for="(item, index) in state.list" :key="index">                 <span>{{item}}</span>             </div>         </div>     </div> </template>  <script setup> import { reactive } from 'vue'  const state = reactive({     list: [1, 2, 3, 4, 5, 6, 7],     refList: [] as Array<any> })  const higherAction = (index: number) => {     let height = state.refList[index].style.height ? state.refList[index].style.height : '20px';     height = Number(height.replace('px', ''));     state.refList[index].style = `height: ${height + 20}px`;     console.log(state.refList[index]); }  const setRefAction = (el: any) => {     state.refList.push(el); } </script>  <style scoped> .demo2-container {     width: 100%;     height: 100%;      .list-section {         width: 200px;         .list-item {             width: 200px;             height: 20px;             background-color: pink;             color: #333;             transition: all .5s ease-in-out;             display: flex;             justify-content: center;             align-items: center;         }     } } </style>
登錄后復制

通過子組件emit傳遞ref

<template>     <div ref="cellRef" @click="cellAction">         <span>{{item}}</span>     </div> </template>  <script setup> import {ref} from 'vue';  const props = defineProps({     item: Number }) const emit = defineEmits(['cellTap']); const cellRef = ref(); const cellAction = () => {     emit('cellTap', cellRef.value); } </script>
登錄后復制

通過對子組件添加了ref屬性,并聲明了一個與ref屬性名稱相同的變量cellRef,此時可以通過emit將cellRef.value作為一個dom引用傳遞出去

Vue3如何操作dom?四種方式介紹

適用場景

多個頁面都可能有操作組件dom的場景

Vue3如何操作dom?四種方式介紹

示例代碼

<template>     <div ref="cellRef" @click="cellAction">         <span>{{item}}</span>     </div> </template>  <script setup> import {ref} from 'vue';  const props = defineProps({     item: Number }) const emit = defineEmits(['cellTap']); const cellRef = ref(); const cellAction = () => {     emit('cellTap', cellRef.value); } </script>  <style scoped> .cell-item {     width: 200px;     height: 20px;     background-color: pink;     color: #333;     transition: all .5s ease-in-out;     display: flex;     justify-content: center;     align-items: center; } </style>
登錄后復制

<template>     <div>         <p>通過子組件emit傳遞ref</p>         <div>             <Cell :item="item" @cellTap="cellTapHandler" v-for="(item, index) in state.list" :key="index">             </Cell>         </div>     </div> </template>  <script setup> import { reactive } from 'vue' import Cell from '@/components/Cell.vue' const state = reactive({     list: [1, 2, 3, 4, 5, 6, 7],     refList: [] as Array<any> })  const cellTapHandler = (el: any) => {     let height = el.style.height ? el.style.height : '20px';     height = Number(height.replace('px', ''));     el.style = `height: ${height + 20}px`; } </script>  <style scoped> .demo2-container {     width: 100%;     height: 100%;      .list-section {         width: 200px;     } } </style>
登錄后復制

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

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
亚洲成A人片在线观看你懂的| 办公室的交易HD中文字幕| 免费无码AV电影在线观看| 八戒.八戒电影免费观看| 天堂AV无码大芭蕉伊人AV孕妇| 久久99国产精品久久99软件 | 久久久久国产一区二区| 丰满的继牳3中文字幕系列| 国产精品久久无码不卡| 精品人妻一区二区三区浪潮在线| 麻豆国产成人AV| 黑人女性猛交XXXXXⅩXX蘑| 日韩精品成人无码专区免费| 人妻aⅴ无码一区二区色戒| 特级小箩利无码毛片| 亚洲AV区无码字幕中文色| 亚洲无日韩码精品| 99在线国内在线视频22| 俄罗斯性孕妇孕交| 激情久久AV一区AV二区AV三| 久久午夜无码鲁丝片| 欧美日韩精品一区二区三区不卡| 视频在线一区二区| 亚洲乱码av无码一区二区三区 | 阿娇张开两腿实干13分钟完整版 | 玩弄人妻少妇精品视频| 亚洲熟妇色XXXXX欧美老妇| C她下嫩B视频内射国产| 国产乱子伦精品无码码专区| 两对夫妻一起旅游互换的说说句子| 野花日本中文免费完整版4| 性一交一乱一伦一在线小视频| 野花新免费高清完整在线观看| 啊灬啊灬啊灬啊灬高潮了| 国产在线 | 传媒麻豆| 免费拗女网站1300部| 挺进绝色老师的紧窄小肉| 亚洲综合国产精品第一页| 一级伦奷片高潮无码看了5| 亚洲男人的天堂在线播放| ZOOM与人性ZOOM视频| 国语精品自产拍在线观看网站 | 伊人精品成人久久综合全集观看| 狠狠色综合7777久夜色撩人| 嗯…啊 摸 湿 奶头免费视频| 给丰满丁字裤少妇按摩到高潮| 中国女篮世界排名| 亚洲国产午夜无码精品小说| 天天大片天天看大片| 欧美猛少妇色XXXXⅩBBBB| 久热爱精品视频线路一| 精品国产乱码久久久久久小说| 精品高潮呻吟99AV无码| 国产成人精品亚洲日本专区61| 久久久亚洲欧洲日产国码二区| 色综合久久精品亚洲国产消防| 亚洲日韩精品欧美一区二区| 成人特黄A级毛片免费视频| 久久AV喷吹AV高潮AV欧美| 色屁屁WWW影院免费观看入口| 一本加勒比波多野结衣| 国产丰满大屁股XXXX| 女人夜夜春高潮爽A∨片 | 国产精品亚洲二区在线观看| 男女性高爱潮免费网站| 亚洲A∨精品一区二区三区| АⅤ天堂中文在线网| 久久精品国内一区二区三区| 天堂资源在线官网| 97久久综合亚洲色HEZYO| 国产一卡2卡3卡4卡无卡国色 | 久久综合亚洲鲁鲁九月天| 无码日韩精品一区二区人妻| BBW厕所白嫩BBWXXXX| 久久精品国产精品国产精品污 | 国精产品一线二线三线| 日韩精品乱码AV一区二区| 中文字幕不卡乱偷在线观看| 极品VPSWINDOWS少妇| 手机在线看永久AV片免费高潮| 40岁的寡妇下面紧不紧| 精品无人区麻豆乱码1区2| 无码AV免费不卡在线观看 | 青草久久久国产线免观蜜芽| 野花韩国在线观看免费版5| 国产欧美精品一区AⅤ影院| 日韩欧美群交P内射捆绑| 337P日本欧洲亚洲大胆色噜噜 | 天天躁日日躁狠狠躁日日躁| JAPANESE厨房乱TUB偷| 久久亚洲精精品中文字幕 | 国产日韩一区在线精品| 人妻免费久久久久久久了| 在线观看日本亚洲一区| 精东传媒一二三区进站口| AAAAA级少妇高潮大片| 超碰人人看人人2017| 嫩BBB槡BBBB搡BBBB| 久久99精品久久久久久久久久| 精品人妻无码专区中文字幕| 无码日韩人妻精品久久蜜桃| 俄罗斯卖CSGO的网站免费进入| 欧美一区二区三区不卡| 18禁免费无码无遮挡不卡网站 | 亚洲欧美黑人深喉猛交群| 国产无遮挡又黄又爽在线观看| 天天影视色香欲综合久久| 成人无码H免费动漫在线观看| 欧美极品在线观看| 18禁真人床震无遮挡免费| 麻豆国产AV丝袜白领传媒| 亚洲中文久久久久久精品国产| 极品人妻被黑人中出种子| 亚洲AV无码国产综合专区| 国产精品久久久久久久| 久久99精品久久久久久不卡| 日本在线人数最多的MMORPG| 亚洲成AV人片天堂网无码| 国产亚洲视频在线观看播放| 午夜精品久久久久成人| 国产精品高潮呻吟久久AV| 天天夜碰日日摸日日澡性色AV| 丰满熟妇BBWBBWBBWBB| 日韩视频一二三区2021| 波多野结衣AV在线无码中文观看| 欧美成人一区二区三区在线视频 | 老狼一区忘忧草欢迎您大豆| 一二三四视频社区在线播放中国| 久久久久久久精品免费| 亚洲自偷自偷偷色无码中文| 久久久橹橹橹久久久久高清| 荫蒂添的好舒服小说短篇| 麻花传媒CEO免费观看| 18禁止看的免费污网站| 欧美成人影院亚洲综合图| WBBBB搡BBBB搡BBBB| 日本丰满熟妇人妻aqq| 多毛freeoprn熟妇多毛y| 爽到憋不住潮喷大喷水视频| 国产精品嫩草影院AV| 性生交大片免费看| 精品高潮呻吟99AV无码| 一本大道久久香蕉成人网| 免费无码AV片流白浆在线观看| AV免费啪啪永久| 日韩大片高清播放器大全| 粗大的内捧猛烈进出在线视频| 天天玩天天玩天天玩| 国产在线无码一区二区三区| 亚洲精品TY久久久久久久久久| 久久精品无码一区二区软件 | 蜜桃AV一区二区| ZZIJZZIJ亚洲日本少妇| 色翁荡息又大又硬又粗又爽| 国产乱人伦偷精品视频不卡| 亚洲乱码精品久久久久| 久久免费看少妇高潮V片特黄| 97久久久精品综合88久久 | 美乳丰满人妻无码视频| となりの家のネツト在线 | 日本爆乳片手机在线播放| 国产AV无码专区亚汌A√| 亚洲AV无码精品无码麻豆| 久久久久久精品免费免费| 99热成人精品热久久6| 色狠狠AV老熟女| 国产又爽又黄的激情精品视频| 一本一道精品欧美中文字幕| 欧美性爱视频第一页| 国产精品VA尤物在线观看| 亚洲人成色77777| 欧美激情ⅩXXXX免费视频| 高清欧美性猛XXXX黑人| 亚洲国产AV无码专区亚洲AV| 免费国产成人AⅤ观看| 成熟交BGMBGMBGM的价格| 性欧美ⅩXXXX极品少妇小说| 久久香蕉国产线看观看怡红院妓院 | 日本爆乳片手机在线播放| 国产无遮挡又黄又爽不要VIP网 | 张柏芝性XXXXXⅩ| 人人妻人人狠人人爽天天综合网| 国产精品VIDEOSSEX国产| 亚洲伊人久久精品影院 | 成片在线看一区二区草莓| 亚洲AV丰满熟妇在线播放| 老头的大龟挺进秀婷小说| 大炕上的肉体交换农村乱睡| 亚洲丰满熟妇浓毛XXXX| 欧美性白人极品HD| 国产亚洲精品精华液| 做AJ姿势教程大全图片 | 人妻夜夜爽天天爽三区丁香花| 国产特级毛片AAAAAA高潮流| 中文字幕日产乱码国内自| 我的真實亂倫故事| 美日韩AV成人影院| 国产欧美日韩综合精品一区二区| ◇一本大道香蕉中文在线| 性高湖久久久久久久久|