使用js加产品图片实现3D效果

2023-10-28 15:10

本文主要是介绍使用js加产品图片实现3D效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用js加产品图片实现3D效果

先看效果图
在这里插入图片描述
实现思路:

通过对不同的产品图的显示隐藏来控制3d效果,通过定时器控制产品图的显示隐藏实现产品的自动旋转

实现步骤

1.第一步先加载所有的图片,iImgCount代表图片的数量,this.imgName代表图片的目录和图片名字。图片加载完毕之后自动旋转3d的效果,当手滑动屏幕或者是鼠标点击时通过计算滑动的距离比例来计算3d显示的位置!废话不多说,䁖䁖代码!!!

// 图片生成createImg() {for (let i = 0; i <= this.iImgCount; i++) {var S = '00000'var picname = '' + i * 2var v = picname.lengthvar ss = S.substr(0, 5 - v)this.imgList.push(require('@/assets/images/3D/' +this.imgName +'/' +this.imgName +'/jz_' +ss +'' +picname +'.png'))}this.loadImages(this.imgList)},// 生成图片标签loadImages(urlArr) {//参数 图片地址数组// eslint-disable-next-line no-unused-varsvar pro = new Promise((resolve, reject) => {if (urlArr.length <= 0) returnlet i = 0,// timer = null,len = urlArr.length,load = url => {if (i < len) {const image = new Image()image.src = urlimage.style.display = 'none'document.getElementById('imgBox').appendChild(image)this.timer = setInterval(() => {if (image.complete) {// console.log('complete')clearInterval(this.timer)load(urlArr[i++])}}, 0)} else {this.showLoading = false // 所有图片加载完后的操作resolve('200')}}load(urlArr[i])})pro.then(value => {if (value == 200) {this.auto()//图片加载完毕后自动旋转3Dthis.changeImg()}})},// 自动旋转3D图auto() {this.timers = setInterval(() => {$('.imgBox img').css('display', 'none')$('.imgBox img').eq(parseInt(this.lastImg)).css('display', 'block')this.lastImg++if (this.lastImg >= this.iImgCount) {this.lastImg = 0}}, 100)},// 清除定时器stopMove() {clearInterval(this.timers)this.timers = null},// 当手滑动时对应的3d动效changeImg() {var that = thisif (isTouchDevice()) {$('#imgBox')[0].ontouchstart = function(ev) {var oEvent = ev || eventthat.startX = oEvent.changedTouches[0].clientXthat.lastX = that.startX$('#imgBox')[0].ontouchmove = onMove$('#imgBox')[0].ontouchend = onUpfunction onMove(ev) {var oEvent = ev || eventvar i =-(oEvent.changedTouches[0].clientX - that.startX) / that.SCALEthat.num =(that.lastImg +i +Math.abs(Math.floor(i / that.iImgCount)) * that.iImgCount) %that.iImgCount$('.imgBox img').css('display', 'none')$('.imgBox img').eq(parseInt(that.num)).css('display', 'block')// speed=-(oEvent.changedTouches[0].clientX-lastX)/this.SCALE;that.lastX = oEvent.changedTouches[0].clientXreturn false}function onUp() {this.onmousemove = nullthis.onmouseup = nullthat.lastImg = that.numthat.auto()}that.stopMove()return false}} else {$('#imgBox')[0].onmousedown = function(ev) {var oEvent = ev || eventthat.startX = oEvent.clientXthat.lastX = that.startX$('#imgBox')[0].onmousemove = onMove$('#imgBox')[0].onmouseup = onUpfunction onMove(ev) {var oEvent = ev || eventvar i = -(oEvent.clientX - that.startX) / that.SCALEthat.num =(that.lastImg +i +Math.abs(Math.floor(i / that.iImgCount)) * that.iImgCount) %that.iImgCount$('.imgBox img').css('display', 'none')$('.imgBox img').eq(parseInt(that.num)).css('display', 'block')that.lastX = oEvent.clientXreturn false}function onUp() {this.onmousemove = nullthis.onmouseup = nullthat.lastImg = that.numthat.auto()}that.stopMove()return false}}},

这篇关于使用js加产品图片实现3D效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/294045

相关文章

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

SQL Server使用SELECT INTO实现表备份的代码示例

《SQLServer使用SELECTINTO实现表备份的代码示例》在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误,在SQLServer中,可以使用SELECTINT... 在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误。在 SQL Server 中,可以使用 SE

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

基于Go语言实现一个压测工具

《基于Go语言实现一个压测工具》这篇文章主要为大家详细介绍了基于Go语言实现一个简单的压测工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理客户端模块Http客户端处理Grpc客户端处理Websocket客户端

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

Java CompletableFuture如何实现超时功能

《JavaCompletableFuture如何实现超时功能》:本文主要介绍实现超时功能的基本思路以及CompletableFuture(之后简称CF)是如何通过代码实现超时功能的,需要的... 目录基本思路CompletableFuture 的实现1. 基本实现流程2. 静态条件分析3. 内存泄露 bug