微信小程序(原生)使用Swiper实现(商品详情)视频和图片轮播(仿京东/淘宝商品详情头部视频+图片轮播)

2023-11-02

一、需求

1、如果第一是视频,不进行自动轮播
2、可以手动滑动切换
3、点击播放视频,也可以手动滑动切换
4、视频播放完后,自动轮播
5、视频可以点击暂停和全屏播放

二、最终效果

在这里插入图片描述

三、源码

播放icon使用了TDesign组件库

1、wxml

<swiper class="detail-banner" wx:if="{{details.images.length > 0}}" indicator-dots="{{indicatorDots}}" autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}" circular="{{circular}}" indicator-color="{{indicatorColor}}" indicator-active-color="{{indicatorActiveColor}}" style="background: #fff;">
      <swiper-item wx:for="{{bannerMsg}}" wx:for-item="item" wx:key="index">
        <view class='videocover' data-id="{{index}}" wx:if="{{item.type==2}}">
          <view class='videocoverbg'></view>
          <t-icon name="play-circle" size="100rpx" class="playIcon" bindtap="videoPlay" wx:if="{{!controls}}" />
        </view>
        <view wx:if="{{item.type==2}}">
          <video class='box-w block' id="video" src="{{item.url}}" show-center-play-btn="{{false}}" objectFit="cover" bindended="endPlay" controls="{{controls}}"></video>
        </view>
        <image class="detail-banner-img" src="{{item.url}}" data-src="{{item.url}}" wx:if="{{item.type==1}}"></image>
      </swiper-item>
    </swiper>

2、wxss

 .detail-banner {
  width: 100%;
  height: 500rpx;
  padding: 0 0 10rpx 0;
}

.detail-banner-img {
  width: 100%;
  height: 100%;
}

/* video */

.box-w {
  width: 100%;
  height: 500rpx;
}

.videocover {
  width: 100%;
  overflow: hidden;
}

.videocoverbg {
  position: absolute;
  left: 0;
  top: 0;
  right: 0;
  bottom: 0;
  background: rgba(0, 0, 0, 0.3);
}

.playIcon {
  position: absolute;
  top: 50%;
  z-index: 2;
  left: 50%;
  width: 100rpx;
  height: 100rpx;
  background-color: #fff;
  border-radius: 50%;
  transform: translate(-50%, -50%);
}

.videocover .cover {
  width: 100%;
}

3、js

Page({
  data: {
    details: {}, // 商品详情信息
    indicatorDots: true, // 是否显示面板指示点
    autoplay: false, // 自动播放
    interval: 3000, // 自动切换时间间隔
    duration: 400, // 滑动动画时长
    circular: true, //是否循环 是否采用衔接滑动
    indicatorColor: "lightgray", //指示点颜色
    indicatorActiveColor: "red", //当前选中的指示点颜色
    controls: false, // 是否显示播放icon
  },

  // 获取商品详情
  getDetail(spuId) {
    const selectedAddr = wx.getStorageSync('addressMsg')
    const storeId = selectedAddr.storeId
    const selectedAddrStr = selectedAddr.street
    Promise.all([fetchGood(spuId, storeId), fetchActivityList(spuId, storeId)]).then((res) => {
      const [details, activityData] = res;
      const {video,images} = details;
      let bannerMsg = []
      bannerMsg = bannerMsg.concat(images)
      bannerMsg = bannerMsg.map(val => {
        return {
          type: 1,
          url: val
        }
      })
      if (video) {
        bannerMsg = [{ type: 2, url: video }, ...bannerMsg]
      }
      // console.log('bannerMsg', bannerMsg, images[0]);
      this.setData({
        details,
        bannerMsg
      });
    });
  },
  //预览图片
  previewImage(e) {
    console.log('预览图片', e)
    const current = e.currentTarget.dataset.src;
    wx.previewImage({
      current, // 当前显示图片的http链接  
      urls: this.data.bannerMsg
      // urls: this.data.imgUrls // 需要预览的图片http链接列表  
    })
  },
  // 播放
  videoPlay() {
    console.log("开始播放")
    this.setData({
      autoplay: false
    })
    let videoplay = wx.createVideoContext("video");
    videoplay.play()
    this.setData({
      controls: true
    })
  },
  // 结束播放
  endPlay() {
    console.log("结束播放")
    this.setData({
      controls: false,
      autoplay: true
    })
  },
  onShow() {
    this.getDetail();
  }
});

四、其他文章

基于ElementUi或Antd再次封装基础组件文档

vue3+ts基于Element-plus再次封装基础组件文档

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信小程序(原生)使用Swiper实现(商品详情)视频和图片轮播(仿京东/淘宝商品详情头部视频+图片轮播) 的相关文章

  • Parcel打包React

    Parcel打包React Parcel介绍 Parcel 官网 parceljs org 官网上的介绍 极速零配置Web应用打包工具 什么 对的 你没看错 它标称的零配置打包 这个打包工具其实在一些大厂 开发 Electron 和 Rea
  • PAT C入门题目-7-18 出租车计价 (15 分)

    7 18 出租车计价 15 分 本题要求根据某城市普通出租车收费标准编写程序进行车费计算 具体标准如下 起步里程为3公里 起步费10元 超起步里程后10公里内 每公里2元 超过10公里以上的部分加收50 的回空补贴费 即每公里3元 营运过程
  • MAC安装Securecrt

    文章目录 一 下载地址 二 安装软件 1 下载的文件有2个 一个是安装包 一个是安装文件 2 打开安装包以后 将安装程序拖到应用程序中 三 执行安装文件 1 执行安装 2 错误解决 四 安装软件 1 打开SecureCTR后 选择Enter
  • 关于Swagger中访问不了文档页面

    因为在SpringBoot启动类中 没有加上 EnableSwagger2WebMvc注解 这个注解的作用是启用swagger对应用程序暴露的API端点进行文档化 个人推断和拦截器拦截请求有关 解决办法就是加 EnableSwagger2W
  • 计算机精英ACM fellow和ACM杰出科学家,各校校友统计

    首先谢谢东南 大学网友青山人的统计工作 http bbs netbig com thread 2675926 1 1 html 人数相同 按照学校名称拼音排序 先统计最高荣誉 ACM Fellow 1 的精英 中国科大 81硕 李 凯 19
  • Spring面试问答Top 25

    本人收集了一些在大家在面试时被经常问及的关于Spring的主要问题 这些问题有可能在你下次面试时就会被问到 对于本文中未提及的Spring其他模块 我会单独分享面试的问题和答案 欢迎大家向我推荐你在面试过程中遇到关于Spring的问题 我会
  • APP 性能测试工具

    一 APP 自动化测试工具Appium 官网 http appium io GitHub 地址 https github com appium appium 介绍 Appium 是一个开源的 跨平台的自动化测试工具 支持自动化 iOS An

随机推荐

  • 使用adb 命令(atrace)抓起systrace的方法。【转】

    本文转载自 https www cnblogs com liuliu word p 9963017 html adb shell atrace c b 10240 async start z gfx 1 执行查看adb shell atra
  • 【Python案例】一键自动抠图生成证件照

    0 效果与体验 不想去照相馆 担心肖像隐私被第三方获取 不会抠图 本文实现基于人工智能的一键自动抠图生成证件照 在进入正文之前 先看最终效果 为了让读者快速体验 我写了个小程序 证照工具箱 可打开直接体验 1 人脸检测 在制作证件照时 首选
  • Windows下用pandoc将LaTex转成Word——使用错误总结

    以下是废话阶段 一般期刊投稿都是latex版本啊 奈何有时候机缘总是那么巧合 假如需要word版本呢 科研的乐趣 不就是发现问题 解决问题嘛 那么 就开始愉快地解决问题吧 以下是正片 首先 从无到有的过程当然是先借鉴别人的东西啦 所以 我主
  • idea自动生成类和方法注释

    idea自动生成类和方法注释 一 类注释 方式一 打开settings gt File and COde Templates 选中Files gt Class 添加类注释信息 新建一个类 就会看到类上会自动添加注释 方式二 通过设置文件头来
  • 超5星难度【微软Core allocation】Coding赛题 - 解题思路&优秀代码分享,邀你来“找茬儿”

    6月23日英雄会平台发布了一道难度为超5星的微软比赛题目 截止活动结束共有300多名编程爱好者参与线上答题 而最终通过者仅有7人 通过率仅为2 为什么成绩如此出人意料 是因为原题的英文描述难以理解 还是题目本身的难度太高让很多人望而生畏知难
  • Web前端简易复习手册(一)

    Web前端复习题 一 1 创建js对象的几种方式 2 如何访问对象属性和方法 3 解构是什么 4 什么是原型 原型链 5 基于原型的继承两种方式 6 实例成员 7 原型成员 8 类成员 9 Rest参数含义 10 简述arguments对象
  • 动手学数据分析 Task 1

    动手学数据分析 Task 1 一 数据加载 二 Pandas基础 三 探索性数据分析 一 数据加载 项目源数据请见 kaggle 1 对于csv中的数据 pandas库提供两种方法来读取 分别为 read csv 和read table 二
  • null、undefined、NaN的区别。它们之间的隐式转换和全等结果又是什么?

    前言 在 JavaScript 中 null undefined 和 NaN 是三种不同的特殊值 它们在使用时有着不同的含义和用途 而我们在做项目时候 常常与它们打交道 因此 在编写 JavaScript 代码时需要了解它们之间的区别和相互
  • tensorflow BP神经网络 波士顿房价预测

    前言 啥也别说了 上代码 code 根据波士顿房价信息进行预测 多元线性回归 特征数据归一化 可视化 TensorBoard可视化 读取数据 from sklearn metrics import mean squared error 均方
  • 强化学习:玩转Atari-Pong游戏

    玩转Atari Pong游戏 该项目基于PaddlePaddle框架完成 详情见玩转Atari Pong游戏 Atari 雅达利 最初是一家游戏公司 旗下有超过200款游戏 不过已经破产 在强化学习中 Atari游戏是经典的实验环境之一 因
  • python数字信号_Python数字信号处理应用

    第 1章 声音和信号1 1 1 周期信号1 1 2 频谱分析3 1 3 信号4 1 4 波形的读写6 1 5 频谱7 1 6 波形对象7 1 7 信号对象8 第 1章 声音和信号1 1 1 周期信号1 1 2 频谱分析3 1 3 信号4 1
  • 电脑大小写怎么切换_快速练习好电脑打字的方法

    使用电脑的基本技能 打字 很多人打字都是二指禅 极其不专业 让人看了感觉到非常的搞笑 当有专业的人看见你二指禅打字 就会感觉你这个人水平不行 根本不会盲打 要想熟练地使用电脑 打字是基本的技能 一定要练习会盲打 练习好计算机键盘的盲打 盲打
  • CMake应用:集成gtest进行单元测试

    编写代码有bug是很正常的 通过编写完备的单元测试 可以及时发现问题 并且在后续的代码改进中持续观测是否引入了新的bug 对于追求质量的程序员 为自己的代码编写全面的单元测试是必备的基础技能 在编写单元测试的时候也能复盘自己的代码设计 是提
  • 记一次通过ftplib上传文件至ftp,遇到550 Failed to change directory及553 Could not creat file问题与解决

    遇到550及553错误后 排查思路 1 查看ftp上传路径是否从根目录开始 个人遇到的情况是 需求方提供的ftp地址存在隐藏目录 需求方提供的ftp地址为 ftp xx xx xxx xxx xxx input 这个地址可以正常访问 只不过
  • TPS5430和TPS54302调试艰辛之路

    此文用于记录个人调试中碰到的问题 也请各路大神不吝赐教指点迷津 该问题目前还没有解决也没有得到一个合理的解释 本人仍在探索 调试背景 功率需求 5V 0 1A 需要做一个小板子 功能就是将232通讯转换为485通讯 需要24V供电所以选了D
  • 【地图可视化】Echarts地图上展示3D柱体

    这是以前有这方面可视化的需求做的 找了很多资料 最后感觉这样的效果比较满意 效果展示 以下以江苏省的地图为例 数据准备 对于想要做3d效果的地区 需要准备对应的json文件 可以在这个网站上下载 数据最小粒度可以具体到县 DataV Geo
  • OpenCV曝光参数和快门时间的对应关系

    目录 1 曝光设置 2 设置自动曝光为手动曝光 3 曝光参数具体对应于曝光时间 4 代码实现 5 其他知识补充 5 1 相机曝光原理 5 2 快门速度 opencv Camera曝光设置 1 曝光设置 cv cap set cv CAP P
  • 插入排序 直接插入 C语言

    碎碎念念 基本思路是 一般先孤立这堆数字的第一个数 那么它自己一个就是有序了 再拿后面的数和它比较 找到大小位置合适的插进去 完了之后这一小堆还是有序的 再拿后面的来和前面的比较 找到合适的位置插进去 直到全部插完 代码 include
  • Arthas使用教程

    什么是 Arthas 摘录一段官方 Github 上的简介 Arthas 是Alibaba开源的Java诊断工具 深受开发者喜爱 当你遇到以下类似问题而束手无策时 Arthas 可以帮助你解决 这个类从哪个 jar 包加载的 为什么会报各种
  • 微信小程序(原生)使用Swiper实现(商品详情)视频和图片轮播(仿京东/淘宝商品详情头部视频+图片轮播)

    一 需求 1 如果第一是视频 不进行自动轮播 2 可以手动滑动切换 3 点击播放视频 也可以手动滑动切换 4 视频播放完后 自动轮播 5 视频可以点击暂停和全屏播放 二 最终效果 三 源码 播放icon使用了TDesign组件库 1 wxm