轮播图放大预览效果的实现

  • 前言
  • 一、wx.previewImage接口API
  • 官方介绍:
  • 代码示例:
  • 二、图片全屏预览
  • 1.效果展示
  • 2.编码
  • img.wxml
  • img.js
  • img.wxss
  • 三、轮播图全屏预览
  • 1、效果展示
  • 2、编码
  • img.wxml
  • img.js
  • 会遇到的问题:
  • 总结



前言

最近小编又惹火上身了,作为一个后端开发的小白,公司居然让我去试水小程序,说实话,如果你学过vue的话,小程序还是很容易上手的,对于小编这种360度都会骚操作的人,简单上岸还是可以的,图片全屏预览,玩过快手,短视频都会时常刷到这么个效果,以及微信朋友圈的朋友们的狗粮图,我们总是猝不及防的放大,废话不多说,操作起来。

一、wx.previewImage接口API

官方介绍:

wx.previewImage(Object object, boolean showmenu),在新页面中全屏预览图片。预览的过程中用户可以进行保存图片、发送给朋友等操作。

iOS 实现轮播图放大缩小_xml

代码示例:

wx.previewImage({
  current: '', // 当前显示图片的http链接
  urls: []    // 需要预览的图片http链接列表
})

current:当前图片的地址(注意:线上地址),urls:图片数组(注意:必须写)

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、图片全屏预览

1.效果展示

iOS 实现轮播图放大缩小_全屏_02


全屏预览:

iOS 实现轮播图放大缩小_iOS 实现轮播图放大缩小_03

2.编码

img.wxml

<view>
  <image src="{{imgList[0]}}" bindtap="prclick" data-src="{{imgList[0]}}"></image>
  <image src="{{imgList[1]}}" bindtap="prclick" data-src="{{imgList[1]}}"></image>
  <image src="{{imgList[2]}}" bindtap="prclick" data-src="{{imgList[2]}}"></image>
</view>

img.js

/**
   * 页面的初始数据
   */
  data: {
    imgList: [
      "http://ydfblog.cn/dfs/group1/M00/00/16/rBghtmASfZCACqBwACKYFW6g2Ws043.jpg",
      "http://ydfblog.cn/dfs/group1/M00/00/16/rBghtmASfZ-AdRHEACpLMa4xENk303.jpg",
      "http://ydfblog.cn/dfs/group1/M00/00/15/rBghtmASfXyAN-QlABGmOyJVT68055.jpg"
    ]
  },

  //预览图片,放大预览
  prclick(e) {
    console.log(e.currentTarget.dataset.src)
    let currentUrl = e.currentTarget.dataset.src
    wx.previewImage({
      current: currentUrl,    // 当前显示图片的http链接
      urls: this.data.imgList // 需要预览的图片http链接列表
    })
  },

img.wxss

image{
  width: 100% !important;
}

三、轮播图全屏预览

1、效果展示

iOS 实现轮播图放大缩小_iOS 实现轮播图放大缩小_04


全屏预览:

iOS 实现轮播图放大缩小_iOS 实现轮播图放大缩小_05

2、编码

img.wxml

iOS 实现轮播图放大缩小_小程序_06


重点部分:

<image bindtap="swipclick" data-list="{{article.medias}}" data-src="{{resUrl+item.url1}}" src='{{resUrl+item.url1}}' mode='aspectFill'></image>

自定义属性传递参数:data-list 图片数组,data-src 当前图片地址,bindtap绑定单击事件。

img.js

//预览图片,放大预览
swipclick(e) {
   var currentSrc = e.currentTarget.dataset.src;  //获取当前图片地址
   var imgList = e.currentTarget.dataset.list;    //获取图片的数组
   var arrUrls = new Array();
   for (var i = 0; i < imgList.length; i++) {
     arrUrls[i] = this.data.resUrl + imgList[i].url1; 
   }
   console.log(arrUrls)
   wx.previewImage({
     current: currentSrc,
     urls: arrUrls
   })
},
arrUrls[i] = this.data.resUrl + imgList[i].url1;  服务器IP地址 + 数据库存储的图片地址

会遇到的问题:

由于是轮播图,可能image 的 bindtap绑定事件失效,触发无效,不要给image标签添加该属性:

pointer-events: none; //元素永远不会触发点击事件,会冒泡的下去

这里我们可以手动测试一下:

iOS 实现轮播图放大缩小_全屏_07

总结

以上就是今天要分享的内容,pointer-events: none; 元素的坑,我花了一个多小时才找到,在微信小程序中需要注意的是不能放置再组件中使用 pointer-events: none,但是我们可以在组件中设置 pointer-event: auto; 这是不影响bindtap绑定的。