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

基于Vue3+TypeScript實現(xiàn)圖片預(yù)覽組件

 更新時間:2024年04月28日 09:10:12   作者:下雨會打傘的前端  
在現(xiàn)代的 Web 應(yīng)用中,圖片預(yù)覽是一個常見的需求,本文將介紹如何使用 Vue3 和 TypeScript 開發(fā)一個圖片預(yù)覽組件,支持展示單張或多張圖片,并提供了豐富的配置選項,需要的朋友可以參考下

簡介

在現(xiàn)代的 Web 應(yīng)用中,圖片預(yù)覽是一個常見的需求。本文將介紹如何使用 Vue3 和 TypeScript 開發(fā)一個圖片預(yù)覽組件,支持展示單張或多張圖片,并提供了豐富的配置選項。

組件功能

  • 支持單張或多張圖片: 可以同時預(yù)覽單張或多張圖片,支持左右切換。
  • 自定義配置選項: 提供了豐富的配置選項,如圖片縮放方式、懶加載、組件尺寸等。
  • 多張圖片:無限循環(huán)預(yù)覽,默認點擊為首張,布局左右自適應(yīng)父元素寬度,上下間距可通過參數(shù)(rowGap)控制。

組件實現(xiàn)

<script setup lang="ts" name="ImagePreview">
import { computed } from "vue";

interface ImageProps {
	imageUrl: string | string[]; // 圖片地址 ==> 必傳
	imageFit?: "fill" | "contain" | "cover" | "none" | "scale-down"; // 圖片縮放方式 ==> 非必傳(默認為 cover)
	imageLazy?: boolean; // 是否懶加載 ==> 非必傳(默認為 true)
	height?: string; // 組件高度 ==> 非必傳(默認為 150px)
	width?: string; // 組件寬度 ==> 非必傳(默認為 150px)
	borderRadius?: string; // 組件邊框圓角 ==> 非必傳(默認為 8px)
	rowGap?: string; // 組件行間距 ==> 非必傳(默認為 10px)
}
// 接收父組件參數(shù)并設(shè)置默認值
const props = withDefaults(defineProps<ImageProps>(), {
	imageUrl: "",
	imageFit: "cover",
	imageLazy: true,
	height: "150px",
	width: "150px",
	borderRadius: "8px",
	rowGap: "10px"
});

// 圖片列表
const imageList = computed<string[]>(() => {
	if (Array.isArray(props.imageUrl)) {
		return props.imageUrl;
	}
	return [props.imageUrl];
});
</script>

<template>
	<div class="image-list">
		<div v-for="(item, index) in imageList" :key="index">
			<el-image
				class="image-style"
				:src="item"
				hide-on-click-modal
				:initial-index="index"
				:preview-src-list="imageList"
				:lazy="imageLazy"
				:fit="imageFit"
				:z-index="99999"
				preview-teleported
			/>
		</div>
	</div>
</template>

<style lang="scss" scoped>
.image-list {
	display: grid;
	grid-row-gap: v-bind(rowGap);
	grid-template-columns: repeat(auto-fill, v-bind(width));
	justify-content: space-between;
	.image-style {
		width: v-bind(width);
		height: v-bind(height);
		border-radius: v-bind(borderRadius);
	}
}
</style>

知識拓展

vue2使用v-viewer實現(xiàn)圖片預(yù)覽

v-viewer

用于圖片瀏覽的Vue組件,支持旋轉(zhuǎn)、縮放、翻轉(zhuǎn)等操作,基于viewer.js。

在Vue.js 2中使用v-viewer插件實現(xiàn)圖片預(yù)覽功能相對簡單。v-viewer是一個Vue.js的圖片預(yù)覽插件,可以輕松實現(xiàn)圖片的放大、縮小和滑動預(yù)覽等功能。以下是實現(xiàn)步驟:

安裝 v-viewer 插件:

在項目目錄下使用 npm 或 yarn 安裝 v-viewer 插件。

npm install v-viewer --save  
npm i -S viewerjs
# 或
yarn add v-viewer
yarn add  viewerjs

在 main.js 文件中引入和配置 v-viewer 插件:

這行放在:import App from './App.vue'; 之前
import Viewer from 'v-viewer';
 
import 'viewerjs/dist/viewer.css';
 
Vue.use(Viewer);
或者
Vue.use(Viewer, {
  defaultOptions: {
    zIndex: 9999, // 設(shè)置圖片預(yù)覽組件的層級,確保能在其他組件之上
  },
});

在需要預(yù)覽圖片的組件中使用 v-viewer 指令:

<template>
  <div>
    <!-- 點擊圖片觸發(fā)預(yù)覽 -->
    <img v-for="(image, index) in imageList" :key="index" :src="image" v-viewer />
  </div>
</template>

<script>
export default {
  data() {
    return {
      imageList: [
        'https://example.com/image1.jpg',
        'https://example.com/image2.jpg',
        // 添加更多圖片鏈接
      ],
    };
  },
};
</script

也可以使用以下方法

<template>
  <div>
    <button type="button" class="button" @click="previewURL">URL Array</button>
  </div>
</template>
<script>
  export default {
    data() {
      sourceImageURLs: [
        'https://picsum.photos/200/200?random=1',
        'https://picsum.photos/200/200?random=2',
      ],
    },
    methods: {
      previewURL () {
        // 如果使用`app.use`進行全局安裝, 你就可以像這樣直接調(diào)用`this.$viewerApi`
        const $viewer = this.$viewerApi({
          images: this.sourceImageURLs
        });
      },
    },
  };
</script>

在上面的代碼中,我們將 v-viewer 指令應(yīng)用在 img 標簽上,這樣點擊圖片時會觸發(fā)預(yù)覽效果。

總結(jié)

通過使用 Vue3 和 TypeScript,我們可以輕松地開發(fā)出高度可定制的圖片預(yù)覽組件。這個組件可以幫助我們展示圖片,提供了豐富的配置選項,以滿足不同項目的需求。

希望本文能幫助你更好地理解如何開發(fā)圖片預(yù)覽組件!如果你有任何問題或建議,請隨時提出。

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

相關(guān)文章

  • web面試vue自定義組件及調(diào)用方式

    web面試vue自定義組件及調(diào)用方式

    這篇文章主要介紹了web面試中常問到的關(guān)于vue自定義組件及調(diào)用方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-09-09
  • vue 引入公共css文件的簡單方法(推薦)

    vue 引入公共css文件的簡單方法(推薦)

    下面小編就為大家分享一篇vue 引入公共css文件的簡單方法(推薦),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • vue配置font-awesome5的方法步驟

    vue配置font-awesome5的方法步驟

    這篇文章主要介紹了vue配置font-awesome5的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • vue-列表下詳情的展開與折疊案例

    vue-列表下詳情的展開與折疊案例

    這篇文章主要介紹了vue-列表下詳情的展開與折疊案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 報錯[vuex] unknown action type: userLogin問題及解決

    報錯[vuex] unknown action type: userLogin問

    這篇文章主要介紹了報錯[vuex] unknown action type: userLogin問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Vue?瀏覽器本地存儲的問題小結(jié)

    Vue?瀏覽器本地存儲的問題小結(jié)

    這篇文章主要介紹了Vue?瀏覽器本地存儲,LocalStorage 和 SessionStorage 統(tǒng)稱為 WebStorage,存儲大小一般支持5mb左右,但是不同的瀏覽器也有區(qū)別,具體內(nèi)容介紹跟隨小編一起看看吧
    2022-04-04
  • vue實現(xiàn)移動端多格輸入框

    vue實現(xiàn)移動端多格輸入框

    這篇文章主要為大家詳細介紹了vue實現(xiàn)移動端多格輸入框,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Vue3+Vite項目使用mockjs隨機模擬數(shù)據(jù)

    Vue3+Vite項目使用mockjs隨機模擬數(shù)據(jù)

    這篇文章主要介紹了Vue3+Vite項目使用mockjs隨機模擬數(shù)據(jù),需要的朋友可以參考下
    2023-01-01
  • vue @ ~ 相對路徑 路徑別名設(shè)置方式

    vue @ ~ 相對路徑 路徑別名設(shè)置方式

    這篇文章主要介紹了vue @ ~ 相對路徑 路徑別名設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vue如何監(jiān)聽頁面緩存事件

    vue如何監(jiān)聽頁面緩存事件

    這篇文章主要介紹了vue如何監(jiān)聽頁面緩存事件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評論

龙江县| 冀州市| 铜陵市| 安化县| 长海县| 汉沽区| 青龙| 塔城市| 阳江市| 沽源县| 清新县| 朝阳区| 岐山县| 原阳县| 曲松县| 四平市| 三河市| 舟山市| 仁布县| 辽宁省| 都昌县| 图们市| 大同市| 虞城县| 蒙城县| 平原县| 瑞金市| 微山县| 社旗县| 荆州市| 海城市| 鹤岗市| 克拉玛依市| 绥阳县| 共和县| 昂仁县| 永修县| 广河县| 沂水县| 翁牛特旗| 兰州市|