最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

elementui實現(xiàn)預(yù)覽圖片組件二次封裝

 更新時間:2020年12月29日 09:19:35   作者:LastStarDust  
這篇文章主要介紹了elementui實現(xiàn)預(yù)覽圖片組件二次封裝的方法 ,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下

起因

在elementui組件庫中,el-image組件有個預(yù)覽圖片功能,比較簡潔,但是和圖片綁定在一起,我們只想要一個單純的預(yù)覽組件,傳遞一個圖片,通過事件方式,顯示大圖

分析

通過查看elementui的代碼,發(fā)現(xiàn)在image(el-image組件)目錄中里面有一個image-viewer組件, el-image組件的預(yù)覽功能也是通過這一個組件實現(xiàn)的,只是官方?jīng)]有把這個組件單獨暴露出來

這里就比較簡單了,我們可以使用手動導(dǎo)入組件的方式,引入image-viewer組件

image-viewer組件二次封裝

這里大概做了三件事

  • 組件方式導(dǎo)入element的image-viewer組件
  • 使用$attrs和$listeners把上層的屬性和方法,原封不動傳遞給image-viewer組件,不用手動處理屬性和方法,除非添加額外的功能
  • 修改關(guān)閉按鈕的樣式
<template>
 <div>
 <el-image-viewer
  v-bind="$attrs"
  v-on="$listeners"
 />
 </div>
</template>

<script>
// 手動導(dǎo)入圖片預(yù)覽組件
import ElImageViewer from 'element-ui/packages/image/src/image-viewer'

export default {
 name: 'ImagePreview',
 components: { ElImageViewer }
}
</script>

<style lang="scss" scoped>
::v-deep .el-image-viewer__btn.el-image-viewer__close {
 color: #fff;
}
</style>

使用

<template>
 <div>
 <el-button type="primary" @click="handlePictureCardPreview"
  >大圖預(yù)覽</el-button
 >
 <image-preview
  v-if="dialogVisible"
  :on-close="
  () => {
   dialogVisible = false;
  }
  "
  :url-list="[dialogImageUrl]"
 />
 </div>
</template>

<script>
import ImagePreview from "@/components/ImagePreview";

export default {
 components: {
 ImagePreview,
 },
 data() {
 return {
  imageUrl:
  "https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1483731740,4186543320&fm=26&gp=0.jpg",
  dialogImageUrl: "",
  dialogVisible: false,
 };
 },
 methods: {
 // 預(yù)覽
 handlePictureCardPreview() {
  this.dialogImageUrl = this.imageUrl;
  this.dialogVisible = true;
 }
 },
};
</script>


優(yōu)化:點擊mask遮罩層關(guān)閉圖片預(yù)覽

上面封裝以后,可以很簡單使用圖片預(yù)覽,美中不足的是,點擊遮罩層,無法關(guān)閉大圖預(yù)覽,只能點擊右上角關(guān)閉按鈕,才會關(guān)閉預(yù)覽,使用上不太方便

分析

在查看image-viewer組件的源碼發(fā)現(xiàn),關(guān)閉按鈕綁定hide方法,用于關(guān)閉預(yù)覽的,但是遮罩層沒有綁定任何方法,遮罩層也沒有對外暴露任何方法調(diào)用,難受~

解決方法

  • 先獲取image-viewer組件
  • 隨后獲取到遮罩層元素,給遮罩層綁定一個方法,點擊時候,就調(diào)用image-viewer組件里的hdie方法,達(dá)到關(guān)閉的目的
  • 在卸載組件的時候,移除之前給遮罩層綁定的方法
  • 點擊遮罩關(guān)閉預(yù)覽,對外暴露一個標(biāo)志,控制是否點擊遮罩關(guān)閉預(yù)覽

完整代碼如下:

<template>
 <div>
 <el-image-viewer
  ref="elImageViewer"
  v-bind="$attrs"
  v-on="$listeners"
 />
 </div>
</template>

<script>
import ElImageViewer from 'element-ui/packages/image/src/image-viewer'

export default {
 name: 'ImagePreview',
 components: { ElImageViewer },
 props: {
 // 點擊mask是否隱藏大圖
 maskhide: {
  type: Boolean,
  default: true
 }
 },
 mounted() {
 if (this.maskhide) {
  this.addHideToMask()
 }
 },
 methods: {
 addHideToMask() {
  this.$viewer = this.$refs.elImageViewer
  if (this.$viewer) {
  // 獲取遮罩層元素
  const mask = this.$viewer.$el.querySelector('.el-image-viewer__mask')
  if (mask) {
   // 遮罩層增加點擊事件,關(guān)閉預(yù)覽
   mask.addEventListener('click', this.hide)
   // hook卸載事件,移除之前添加在mask元素的事件
   this.$once('hook:beforeMount', () => {
   mask && mask.removeEventListener('click', this.hide)
   })
  }
  }
 },
 hide() {
  this.$viewer && this.$viewer.hide()
 }
 }
}
</script>

<style lang="scss" scoped>
::v-deep .el-image-viewer__btn.el-image-viewer__close {
 color: #fff;
}
</style>

查看在線示例

查看在線示例

以上就是elementui實現(xiàn)預(yù)覽圖片組件二次封裝的詳細(xì)內(nèi)容,更多關(guān)于elementui 預(yù)覽圖片組件二次封裝的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue三種常用傳值示例(父傳子、子傳父、非父子)

    Vue三種常用傳值示例(父傳子、子傳父、非父子)

    這篇文章主要介紹了Vue傳值-三種常用傳值示例,主要介紹了父組件向子組件進(jìn)行傳值,子組件向父組件傳值和非父子組件進(jìn)行傳值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • vue?layout模板頁的使用實例詳解

    vue?layout模板頁的使用實例詳解

    Vue 項目中使用布局組件來創(chuàng)建頁面布局的方式是完全可行的,而且在很多項目中都被廣泛采用,包括像 ruoyi 這樣的框架,這篇文章主要介紹了vue?layout模板頁的使用,需要的朋友可以參考下
    2023-08-08
  • vue3中toRef、toRefs和toRaw的使用

    vue3中toRef、toRefs和toRaw的使用

    本文主要介紹了vue3中toRef、toRefs和toRaw的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • vue項目中各文件的使用說明

    vue項目中各文件的使用說明

    這篇文章主要介紹了vue項目中各文件的使用說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Vue3利用組合式函數(shù)和Shared Worker實現(xiàn)后臺分片上傳

    Vue3利用組合式函數(shù)和Shared Worker實現(xiàn)后臺分片上傳

    這篇文章主要為大家詳細(xì)介紹了Vue3如何利用組合式函數(shù)和Shared Worker實現(xiàn)后臺分片上傳(帶哈希計算),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • vue3使用videojs播放m3u8格式視頻教程

    vue3使用videojs播放m3u8格式視頻教程

    m3u8是一種基于HTTP Live Streaming(HLS)文件視頻格式,它主要是存放整個視頻的基本信息和分片(Segment)組成,下面這篇文章主要給大家介紹了關(guān)于vue3使用videojs播放m3u8格式視頻的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • 基于elementUI豎向表格、和并列的案例

    基于elementUI豎向表格、和并列的案例

    這篇文章主要介紹了基于elementUI豎向表格、和并列的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 使用Vue創(chuàng)建前后端分離項目的完整過程(前端部分)

    使用Vue創(chuàng)建前后端分離項目的完整過程(前端部分)

    這篇文章主要介紹了使用Vue.js和Node.js搭建一個前端和后端分離的項目,并使用VueCLI3腳手架、axios進(jìn)行HTTP請求、Vue-router實現(xiàn)前端路由和vuex進(jìn)行狀態(tài)管理,需要的朋友可以參考下
    2025-01-01
  • vue實現(xiàn)標(biāo)簽云效果的方法詳解

    vue實現(xiàn)標(biāo)簽云效果的方法詳解

    這篇文章主要介紹了vue實現(xiàn)標(biāo)簽云效果的方法,結(jié)合實例形式詳細(xì)分析了vue標(biāo)簽云的實現(xiàn)技巧與相關(guān)操作注意事項,需要的朋友可以參考下
    2019-08-08
  • Vue集成Iframe頁面的方法示例

    Vue集成Iframe頁面的方法示例

    這篇文章主要介紹了Vue集成Iframe頁面的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12

最新評論

靖宇县| 哈巴河县| 新竹市| 曲阳县| 且末县| 凤庆县| 平原县| 塔城市| 二手房| 高邮市| 新野县| 昆明市| 老河口市| 霍林郭勒市| 汕尾市| 香河县| 福鼎市| 四会市| 昆明市| 宜城市| 海丰县| 泗阳县| 温宿县| 墨玉县| 仁化县| 伊金霍洛旗| 台湾省| 辰溪县| 沙洋县| 准格尔旗| 和龙市| 闸北区| 海宁市| 句容市| 镇坪县| 大理市| 峨眉山市| 四川省| 安国市| 榕江县| 鲁山县|