From a250b6216753cfd0c0622a1fbc0f3254fc8e0a4f Mon Sep 17 00:00:00 2001 From: Tevin <tingquanren@163.com> Date: Tue, 19 Mar 2024 18:39:44 +0800 Subject: [PATCH] 图片预览组件,支持图片显示 --- forms/imagePicker/cImagePreview.scss | 16 ++++++++ forms/imagePicker/index.js | 5 +- forms/imagePicker/CImagePreview.vue | 44 ++++++++++++++++++++-- 3 files changed, 58 insertions(+), 7 deletions(-) diff --git a/forms/imagePicker/CImagePreview.vue b/forms/imagePicker/CImagePreview.vue index b92fef7..d36b9c3 100644 --- a/forms/imagePicker/CImagePreview.vue +++ b/forms/imagePicker/CImagePreview.vue @@ -4,12 +4,24 @@ */ <template> - <view class="c-image-preview"></view> + <view class="c-image-preview"> + <image + class="c-image-preview-img" + :class="imgClass" + mode="aspectFit" + :lazyLoad="true" + v-for="(img, index) of imgList" + :src="img.thumb" + :key="index" + @tap="evt => $preview({ current: img.org, urls: imgs })" + /> + </view> </template> <script> import Taro from '@tarojs/taro'; import { $ } from '@tarojs/extend'; +import './cImagePreview.scss'; // 直线方程,点斜式参数 const createLineEquation = (p1, p2) => { @@ -21,8 +33,32 @@ export default { name: 'CImagePreview', + props: { + // 图片样式名 + imgClass: String, + // 图片地址 + imgs: { + type: Array, + default: () => [], + }, + // 开启缩略图地址转换 + useThumb: { + typeof: Boolean, + default: false, + }, + }, data() { return {}; + }, + computed: { + imgList() { + return this.imgs.map(img => ({ + org: img, + thumb: this.useThumb + ? img.replace(/(.*?)(\.(png|jpg|jpeg|gif))$/, '$1_thumb$2') + : img, + })); + }, }, methods: { // option { current, urls } @@ -87,11 +123,11 @@ if (scale - 1 > 0.1) { equationX = createLineEquation( { x: 1, y: 0 }, - { x: scale, y: startOffsetX } + { x: scale, y: startOffsetX }, ); equationY = createLineEquation( { x: 1, y: 0 }, - { x: scale, y: startOffsetY } + { x: scale, y: startOffsetY }, ); } // 初始状态,不计算 @@ -128,7 +164,7 @@ const yMove = evt.touches[1].clientY - evt.touches[0].clientY; const newDistance = Math.sqrt( - xMove * xMove + yMove * yMove + xMove * xMove + yMove * yMove, ); const distanceDiff = newDistance - distance; const newScale = scale + 0.01 * distanceDiff; diff --git a/forms/imagePicker/cImagePreview.scss b/forms/imagePicker/cImagePreview.scss new file mode 100644 index 0000000..06c3c54 --- /dev/null +++ b/forms/imagePicker/cImagePreview.scss @@ -0,0 +1,16 @@ +/** + * CImagePreview + * @author Tevin + */ + +@import "../../common/sassMixin"; + +.c-image-preview { + .c-image-preview-img { + margin: 0 10px 10px 0; + max-width: 300px; + max-height: 300px; + background-color: #f2f2f2; + border-radius: 4px; + } +} \ No newline at end of file diff --git a/forms/imagePicker/index.js b/forms/imagePicker/index.js index 80b1495..2136be5 100644 --- a/forms/imagePicker/index.js +++ b/forms/imagePicker/index.js @@ -4,7 +4,6 @@ */ import CImagePicker from '@components/forms/imagePicker/CImagePicker.vue'; +import CImagePreview from '@components/forms/imagePicker/CImagePreview.vue'; -export { - CImagePicker, -} \ No newline at end of file +export { CImagePicker, CImagePreview }; -- Gitblit v1.9.1