微信小程序自定义组件(写一个点击查看大图有关闭按钮,复制即可使用)

今天碰到一个需求,本来使用wx.previewImage用的好好的,非要加一个关闭按钮,这可把不想写代码的我难住了,查看官方文档没有加这个按钮的属性,那就自己写了吧,自己写的途中发现胶囊隐藏不了,兴高采烈的和产品说自己写组件无法隐藏胶囊,产品说没事,哈哈,只能自己写了,代码已贴出。
先在components创建文件夹,components -> image-view -> image-view.wxml,image-view.js,image-view.js,image-view.json

<!-- <template name="imageViewer"> --><view class="image-viewer-container" bind:tap="handleClose"><swiperclass="image-viewer-swiper"autoplay="{{autoplay}}"bindchange="swiperChange"><block wx:for="{{images}}" wx:key="*this"><swiper-item><image class="image-viewer-image" src="{{item}}" mode="aspectFill" /></swiper-item></block></swiper><view class="image-viewer-close"><image bindtap="handleClose" src="../../images/home/indexClose.png" mode="" class="imageswiper" /><text>{{ currentIndex }}/{{ images.length }}</text></view></view>
<!-- </template> -->

使用template是因为想用一下,但是官方文档说传值只能使用 data 传入的数据,想着直接在data定义一个Boolean值,或者直接在页面定义一个Boolean展示这个image-view组件或者隐藏,感觉不太行没试,有时间的小伙伴可以试试。

.image-viewer-container {position: fixed;top: 0;left: 0;right: 0;bottom: 0;background-color: rgba(0, 0, 0, 1);display: flex;justify-content: center;align-items: center;z-index: 1000;
}.image-viewer-swiper {width: 100%;height: 550rpx;
}.image-viewer-image {width: 100%;height: 100%;
}.image-viewer-close {position: absolute;top: 20px;left: 0;color: white;font-size: 18px;background-color: rgba(0, 0, 0, 0.5);padding: 5px 10px;border-radius: 5px;z-index: 1001;
}
.imageswiper {width: 54rpx;height: 54rpx;vertical-align: sub;margin-right: 200rpx;
}
{"component": true,"usingComponents": {}
}

在页面使用
previewImage 是否展示 Boolean
product.image图片的列表[string, string]
currentIndex 展示第几张第几张 number

页面的js
page({data: {previewImage: false}
})
onSwiper(e) {this.setData({previewImage: true})
},
页面的html
<image-viewer wx:if="{{ previewImage }}" images="{{ product.image }}" currentIndex="{{ currentIndex }}" bindclose="swiclose"></image-viewer>
<!-- <template is="msgItem" data="{{...item}}"/> -->
页面的json
{"usingComponents": {"image-viewer": "/components/image-viewer/image-viewer"},
}

还想使用js写一个,也写一个代码,这段代码实现了基本的滑动查看功能,用户可以通过点击左右滑按钮来查看前后的图片,也可以通过触摸屏设备进行滑动查看。currentIndex变量用于跟踪当前显示的图片。goToSlide函数用于更新图片位置,slideLeft和slideRight分别用于处理左右滑动的逻辑。

<div id="gallery"><div class="image-container"><img src="image1.jpg" alt="Image 1" class="slide" style="left: 0;"><img src="image2.jpg" alt="Image 2" class="slide" style="left: 100%;"><img src="image3.jpg" alt="Image 3" class="slide" style="left: 200%;"><!-- 更多图片 --></div><!-- 控制按钮 --><button onclick="slideLeft()">左滑</button><button onclick="slideRight()">右滑</button>
</div>
#gallery {overflow: hidden;position: relative;width: 300px; /* 设置为图片宽度 */height: 200px; /* 设置为图片高度 */
}
.image-container {position: absolute;width: 300%; /* 所有图片宽度的3倍 */
}
.slide {position: absolute;width: 300px; /* 图片宽度 */height: 200px; /* 图片高度 */transition: left 0.3s ease-in-out;
}
const container = document.querySelector('.image-container');
const slides = document.querySelectorAll('.slide');
let currentIndex = 0;function slideLeft() {goToSlide(currentIndex - 1);
}function slideRight() {goToSlide(currentIndex + 1);
}function goToSlide(index) {if (index < 0 || index >= slides.length) return;slides[currentIndex].style.left = `${100 * index}%`;currentIndex = index;
}// 监听触摸事件进行滑动查看
let startX, endX;
container.addEventListener('touchstart', function(e) {startX = e.touches[0].clientX;
});container.addEventListener('touchend', function(e) {endX = e.changedTouches[0].clientX;if (endX - startX > 0) {slideLeft(); // 向左滑动} else {slideRight(); // 向右滑动}
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/29562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

echarts学习:通过图例事件实现选中后控制多条折线的显隐

1.问题描述 我在工作中遇到了这样一个需求&#xff1a;我们都知道点击echarts折线图的图例&#xff0c;是可以控制折线的显隐的。我现在希望点击某一个图例可以改变多条折线的显隐。 例如在下面这张图中&#xff0c;我将“xxx水位”和“yyy水位”分为一组&#xff1b;将“xxx…

SGPT论文阅读笔记

这是篇想要用GPT来提取sentence embedding的工作&#xff0c;提出了两个框架&#xff0c;一个是SGPT-BE&#xff0c;一个是SGPT-CE&#xff0c;分别代表了Bi-Encoder setting和Cross-Encoder setting。CE的意思是在做阅读理解任务时&#xff0c;document和query是一起送进去&am…

IPv6改造是什么意思?网站IPv6改造怎么做?

随着互联网技术的飞速发展&#xff0c;IPv4地址资源短缺的问题日益凸显&#xff0c;已经难以满足物联网、人工智能等新基建的激增需求。为了解决这一困境&#xff0c;IPv6协议应运而生&#xff0c;其海量的地址资源和内置的安全机制为互联网的持续发展提供了广阔空间。目前各行…

kbadminv1版后台快速开发框架

探索高效开发的新境界&#xff01;kbadminv1 版后台快速开发框架震撼登场&#xff01; 基于强大的 thinkphp6 框架&#xff0c;kbadminv1 为开发者们带来了前所未有的便捷与高效。 它犹如一把智慧的钥匙&#xff0c;轻松开启后台开发的大门。简洁而直观的设计&#xff0c;让复…

2024-06-18 blue-VH-driver-订阅组态相关分析

摘要: 2024-06-18 blue-VH-driver-订阅组态相关分析 订阅组态相关: 1.1 创建订阅分组成功, 但是激活订阅分组失败 调用VH接口删除已经创建的订阅分组 无论否删除成功,都返回不做重试删除已经创建的订阅分组,避免无法结束调用1.2 向订阅分组添加的位号的数据量超过单个订阅分…

高并发系统中面临的问题 及 解决方案

在互联网软件系统中,高并发读写场景会带来一系列复杂的问题。以下是详细的分析和解决方案: 1. 性能瓶颈 问题: 数据库性能瓶颈:高并发请求会导致数据库负载过重,响应时间增加,甚至可能导致数据库崩溃。服务器性能瓶颈:服务器的CPU、内存、网络带宽可能无法承受高并发请…

Maven 配置学习:存在两个本地私服如何配置

Maven 配置学习&#xff1a;存在两个本地私服如何配置 目录 Maven 配置学习&#xff1a;存在两个本地私服如何配置解释&#xff1a;1.本地仓库位置&#xff1a;2.Profiles 定义&#xff1a;3.Repositories 定义顺序&#xff1a;4.Active Profiles&#xff1a; 操作步骤&#xf…

在Pycharm使用Github Copilot

文章目录 1.GitHub Copilot 是什么2.注册GitHub Copilot3.官方使用文档4.安装 GitHub Copilot插件5.在Pycharm中使用6.相关功能键7.启用或禁用 GitHub Copilot 1.GitHub Copilot 是什么 GitHub Copilot 是一款 AI 编码助手&#xff0c;可帮助你更快、更省力地编写代码&#xff…

【MySQL进阶之路 | 高级篇】SQL执行过程

1. 客户端与服务器的连接 运行中的服务器程序与客户端程序本质上都是计算机的一个进程&#xff0c;所以客户端进程向服务器端进程发送请求并得到相应过程的本质就是一个进程间通信的过程. 我们可以使用TCP/IP网络通信协议&#xff0c;命名管道和共享内存等方式&#xff0c;实…

2024/6/18(RBAC,查询用户权限,细粒度授权,选课,支付宝生成二维码支付,支付结果查询需要内网穿透)

黑马程序员【学成在线项目】,P141 测试沙箱支付宝_黑马学成在线支付宝沙箱-CSDN博客 需要内网穿透

PyCharm 快捷键积累

1、快速格式化&#xff1a;Ctrl Alt L Ctrl Alt L 快捷键在 PyCharm 中是用于格式化代码的&#xff0c;它不仅仅适用于 HTML 代码&#xff0c;而是适用于多种编程和标记语言。

31.加载配置文件中的游戏到辅助列表

上一个内容&#xff1a;30.保存游戏配置到文件 以 30.保存游戏配置到文件 它的代码为基础进行修改 效果图&#xff1a; 加载配置文件到列表的函数&#xff1a; void CWndINJ::LoadGame() {int count GetPrivateProfileInt(L"main", L"count", 0, GameI…

通勤必备!重回儿时回忆,完全免费!

哈喽&#xff0c;各位小伙伴们好&#xff0c;我是给大家带来各类黑科技与前沿资讯的小武。 今天给大家安利三个网站&#xff0c;可以完全免费在线玩的小霸王游戏机&#xff0c;重回童年游戏时刻&#xff01; 最后一款还可以网页在线和朋友联机CS、吃鸡、暗黑破坏神、拳皇、恐龙…

【数学】负数

Hello!大家好&#xff0c;我是学霸小羊&#xff0c;今天讲讲负数。 目录 1.负数的概念 2.绝对值 附&#xff1a;c求绝对值方法 3.负数的大小比较 1.负数的概念 比0小的数&#xff0c;叫做负数。 负数全称负实数&#xff0c;负数与正数表示意义相反的量。负数用负号(Min…

[NISACTF 2022]babyserialize(pop链详细分析、构造)

目录 [NISACTF 2022]babyserialize &#xff08;一&#xff09;理清pop链&#xff08;链尾 链头&#xff09;&#xff0c;标注步骤 1. 先找eval、flag这些危险函数和关键字样&#xff08;这是链尾&#xff09; 2.往eval()上面看 3.往$bb()上面看 4.往strtolower()上面看 …

alibaba EasyExcel 导入 Excel 分享

前言&#xff1a; Excel 导入是一个非常常见的功能&#xff0c;项目开发中随处可见&#xff0c;市面上也有各种处理 Excel 的 API&#xff0c;本文简单分享一下 alibaba.excel 的导入功能。 引入依赖&#xff1a; <dependency><groupId>com.alibaba</groupId…

【GD32F303红枫派使用手册】第十六节 USART-DMA串口收发实验

16.1 实验内容 通过本实验主要学习以下内容&#xff1a; 串口DMA工作原理 使用DMA进行串口收发 16.2 实验原理 16.2.1 串口DMA工作原理 在前面ADC章节中&#xff0c;我们介绍了DMA的工作原理&#xff0c;这里就不多做介绍。从GD32F303用户手册中可以查到&#xff0c;各串…

Roboflow对YOLO数据集、标注、训练、下载

一、Roboflow 介绍 一个功能丰富的在线数据标注和深度学习平台&#xff0c;它提供了从数据标注 到模型训练的一站式服务&#xff0c;yolov5到v8官方推荐的数据集查找及下载网站。 主要功能 1、在线标注数据&#xff1a;Roboflow支持在线标注图片和视频数据&#xff0c;提供多…

如何查看k8s中service的负载均衡策略

在Kubernetes中&#xff0c;Service的负载均衡策略一般由kube-proxy负责&#xff0c;kube-proxy使用iptables或IPVS规则进行负载均衡。默认情况下&#xff0c;kube-proxy使用的是轮询&#xff08;Round Robin&#xff09;策略&#xff0c;但是在使用IPVS模式时&#xff0c;可以…

烂笔头笔记:为JDK安装Charles证书,让你的请求能够像在浏览器中那样被抓包

为什么要为JDK安装Charles证书 众所周知&#xff0c;https就是为了防止中间过程被拦截从而导致数据泄密的。若强行加入Charles代理&#xff0c;数据被解密后再被其重新加密&#xff0c;数据已经被“破坏”&#xff0c;客户端从而拒绝建立连接或解析内容。 #mermaid-svg-ksLo5W…