在表格中渲染轮播图的方法;

效果图:代码:

shop()

function shop() {
	// render()
	$.ajax({
		url: "http://jingxun.zhbbll.asia/pc/Commodity/shop_list", //要请求的后端地址
		type: "GET", //数据发送的方式(POST或者GET)
		dataType: 'JSON',
		headers: {
			token: token,
			id: info
		},
		data: {}, //需要传递的参数
		success: function(res) { //ajax请求成功后触发的
			shopdata = res.data;
			render(res.data)
			das = res.data;
			console.log(res);
		},
	})
}
//分也功能
let tbody = document.getElementsByClassName('tbody')[0];
let but = document.getElementById('but');
let page = 0; //页码
let num = 5; //每页数量
let contents = ""; //总数量
let das; //全部数据
let sel = document.getElementById("myselect");
let checkAll = document.getElementById("check_all");
let checkItem = '';
let pageSkips = document.getElementById("page_skip");
// 页面内容渲染
let bbc = [];

function render(shopdata) {
	console.log(shopdata);
	let str = [];
	let ste = ''; //多张轮播图的路径
	let arr = ''; //转为数组每一张的路径
	let stes = [];
	if (shopdata.length == 0) {
		stes = `
		<div class='nodate'>暂无数据</td>
		`
	} else {

	}
	for (i = page * num; i < (page + 1) * num; i++) {
		if (shopdata[i] != undefined) {
			ste = shopdata[i].banner;
			arr = ste.split(","); //分割成数组
			console.log(arr);
			// <td><input type="checkbox" class="check_item" value="${shopdata[i].id}" onclick="checkEst(${shopdata[i].id})"></td>
			str += `
				<tr class="${i%2==0?'excel':'excels'}" style="position: sticky;">
					<td>${i+1}</td>
					<td>${shopdata[i].title}</td>
					<td><div class="icon"><img src="http://jingxun.zhbbll.asia/${shopdata[i].image}" alt=""onerror="nofind()" /></div></td>
					<td>${shopdata[i].price}</td>
					<td>${shopdata[i].num}</td>
					<td><div class="banner-box"><div class="banner">
												<div class="tow">`

			for (let a = 0; a < arr.length; a++) {
				str += `
							<img src="http://jingxun.zhbbll.asia${arr[a]}" alt=""  onerror="nofind()" "/>
						
						`
			}

			str += `</div>
			
												
											<div class="five">`
			for (let d = 0; d < arr.length; d++) {
				str += `<span></span>`

			}
			str += `</div>
											<div class="but">
												<span>&lt;</span>
												<span class="one">&gt;</span>
											</div></div></div></td>
					<td><div class="tui"><label class="toggle-switch" style="position: absolute;">
							<input type="checkbox" onchange="tt(this.checked,${shopdata[i].id})">
							<div class="toggle-switch-background">
								<div class="toggle-switch-handle"></div>
							</div>
						</label></div></td>
						<td><div class="zhuang"><label class="toggle-switch toog" style="position: absolute;">
							<input type="checkbox" onchange="tt(this.checked,${shopdata[i].id})">
							<div class="toggle-switch-background">
								<div class="toggle-switch-handle"></div>
							</div>
						</label></div></td>
					<td>
						<div class="operate ">
							<div class="Editor"  onclick="echo(${shopdata[i].id})">编辑</div>
							<div class="delete" onclick="clde(${shopdata[i].id})">删除</div>
						</div>
					</td>
				</tr>
					`
		}
	}
	$('.last').html(str)
	$('.nodate').html(stes)
	let banner = document.getElementsByClassName('banner'); //获取所有内容的标签
	console.log(banner);
	let tow = document.getElementsByClassName('tow'); //获取所有图片的标签
	let five = document.getElementsByClassName('five'); //获取所有小圆点的标签
	let imgen = tow.children; //获取图片子元素
	let but = document.getElementsByClassName('but'); //获取所有按钮的标签
	let last = document.getElementsByClassName('last')[0];
	let index = []; //初始下标为零
	let intervals = [];
	for (let i = 0; i < tow.length; i++) {
		index.push(0);
	}
	for (let i = 0; i < tow.length; i++) {
		let img = tow[i].children;
		let imgWidth = 120;
		let span = five[i].children;
		let butItem = but[i].children; //获取按钮子元素
		intervals[i] = setInterval(() => {
			// 在 setInterval 的回调中,你需要访问的 DOM 元素应该是根据当前循环的 i 来选择的
			let banner = document.getElementsByClassName('banner')[i];
			// console.log(banner.offsetWidth);
			// console.log(imgWidth);
			console.log(img);
			let width = banner.offsetWidth;
			width = imgWidth;

			if (index[i] < img.length - 1) {
				index[i]++;
				tow[i].style.marginLeft = -index[i] * imgWidth + "px";
			} else {
				index[i] = 0;
				tow[i].style.marginLeft = -index[i] * imgWidth + "px";
			}

			// 更新小圆点的颜色
			for (let j = 0; j < span.length; j++) {
				span[j].style.backgroundColor = "rgba(255, 255, 255, 0.6)";
			}
			span[index[i]].style.backgroundColor = "rgba(0, 0, 255, 0.6)";
		}, 2000);

		// 鼠标移入移出事件处理
		let banner = document.getElementsByClassName('banner')[i];
		console.log(banner);
		banner.onmouseover = function() {
			clearInterval(intervals[i]); // 清除当前轮播的定时器
		};

		banner.onmouseout = function() {
			// 重新启动当前轮播的定时器
			intervals[i] = setInterval(() => {
				// let banner = document.getElementsByClassName('banner')[i];
				// let img = tow[i].children;
				// let imgWidth = img[0].offsetWidth;
				// let span = five[i].children;

				if (index[i] < img.length - 1) {
					index[i]++;
					tow[i].style.marginLeft = -index[i] * imgWidth + "px";
				} else {
					index[i] = 0;
					tow[i].style.marginLeft = -index[i] * imgWidth + "px";
				}

				// 更新小圆点的颜色
				for (let j = 0; j < span.length; j++) {
					span[j].style.backgroundColor = "rgba(255, 255, 255, 0.6)";
				}
				span[index[i]].style.backgroundColor = "rgba(0, 0, 255, 0.6)";
				// 轮播的内容,与上面 setInterval 回调中的内容类似
			}, 2000);
		};

		// 左右按钮点击事件处理
		butItem[0].onclick = function() {
			console.log(index);
			console.log(index[i]);


			if (index[i] > 0) {
				index[i]--;
			} else {
				index[i] = img.length - 1;
			}
			tow[i].style.marginLeft = -index[i] * imgWidth + "px";

			// 更新小圆点的颜色
			for (let j = 0; j < span.length; j++) {
				span[j].style.backgroundColor = "rgba(255, 255, 255, 0.6)";
			}
			span[index[i]].style.backgroundColor = "rgba(0, 0, 255, 0.6)";
		};

		butItem[1].onclick = function() {

			// 右按钮点击事件处理,与你之前的逻辑类似
			if (index[i] < img.length - 1) {
				index[i]++;
			} else {
				index[i] = 0;
			}
			tow[i].style.marginLeft = -index[i] * imgWidth + "px";

			// 更新小圆点的颜色
			for (let j = 0; j < span.length; j++) {
				span[j].style.backgroundColor = "rgba(255, 255, 255, 0.6)";
			}
			span[index[i]].style.backgroundColor = "rgba(0, 0, 255, 0.6)";


		}
		console.log(index);

	}


	// checkItem = document.getElementsByClassName("check_item");
	let content = Math.ceil(shopdata.length / num);
	console.log(content);
	let butStr = ` <span onclick = "left()"> < </span>`;
	for (let i = 0; i < content; i++) {
		if (page - 1 > i && i >= 1) {
			butStr += `<span onclick="left_d()"> ... </span>`;
			i = page - 2;
			continue;
		}
		if (page + 1 < i && content - 2 > i) {
			butStr += `<span onclick="right_d()"> ... </span>`;
			i = content - 2;
			continue;
		}
		butStr +=
			`<span onclick="butt(${i})" style="background-color:${page == i ? "#409EFF;" : ""};"> ${i + 1} </span>`
	}
	butStr += `<span onclick="right()"> > </span>`;
	document.getElementById("but").innerHTML = butStr
	function_name(shopdata)
}
let uid = []; //存放选中状态的id
// //总条数
function function_name(shopdata) {
	contents = shopdata.length;
	$("#sum").text(`共${shopdata.length}条`)
}
//左点击事件
function left() {
	let end = setInterval(function(){}, 10000);
	for (let i = 1; i <= end; i++) {
		clearInterval(i);
	}
	if (page == 0) {
		alert("已经是最后一页了!")
	} else {
		page--;
		// renders(data);
		render(das)
		// render(ardaAll)
	}
	console.log(das);
}
//右点击事件
function right() {
	let end = setInterval(function(){}, 10000);
	for (let i = 1; i <= end; i++) {
		clearInterval(i);
	}
	let content = Math.ceil(contents / num);
	if (page == content - 1) {
		alert("已经是最后一页了!")
	} else {
		page++;
		render(shopdata);
		// render(ardaAll)
	}
}
//页码点击事件
function butt(a) {
	page = a;
	let end = setInterval(function(){}, 10000);
	for (let i = 1; i <= end; i++) {
		clearInterval(i);
	}
	render(das)
}
//每页显示页数
function pageselect() {
	let vinfo = sel.options[sel.selectedIndex].value;
	console.log(vinfo);
	num = vinfo;
	page = 0;
	// checkAll.checked = false;
	render(das);
	// render(ardaAll)
}

讲解:此功能有两大难点;

一、是根据表格的个数渲染轮播图;

二、如何对不同的轮播图进行操作,实现移入、移出、点击轮播等功能;

要解决这两点也有方法一、根据表格去循环渲染轮播图的标签,和图片的个数;

二、在循环渲染不同的定时器;根据下标进行操作不同的轮播图;

希望可以帮到大家;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis工作流程和插件开发

在了解插件开发之前&#xff0c;我们先总体的来梳理一下Mybatis的大致执行流程&#xff1a; 1.new SqlSessionFactoryBuilder().build(inputStream):先根据配置文件&#xff08;包含了全局配置文件和映射配置文件&#xff09;初始化一个对象Configuration&#xff08;这里对象里…

一二三应用开发平台应用开发示例(3)——生成库表及后端代码

生成库表 前端页面的配置&#xff0c;也就是视图功能&#xff0c;我们先放一放&#xff0c;来看看生成库表和后端代码。 关闭实体配置界面&#xff0c;回到实体列表&#xff0c;勾选“文件夹”实体&#xff0c;点击“生成库表”&#xff0c;并确定。 系统提示成功后&#xff…

机器学习-课程整理及初步介绍

简介: 机器学习是人工智能的一个分支&#xff0c;它使计算机系统能够从经验中学习并改进其在特定任务上的表现&#xff0c;而无需进行明确的编程。机器学习涉及多种算法和统计模型&#xff0c;它们可以从数据中学习规律&#xff0c;并做出预测或决策。机器学习的应用非常广泛&…

云计算在保险行业的应用:太平财险团财险理赔新核心业务系统案例

随着科技的快速发展&#xff0c;云计算技术已经成为推动保险行业数字化转型的重要力量。云计算为保险公司提供了弹性、可扩展的计算资源&#xff0c;使其能够灵活应对业务高峰和低谷&#xff0c;提高业务运营效率和风控水平。太平财险与太平金科联合开发的“团财险理赔新核心业…

购物车列表设计

三、缓存结构设计 购物车数量 数据结构 string redisKey : cart_size${userId} value:购物车数量 缓存时间 15天 数据库用户购物车列表 数据结构 string redisKey : cart${userId} value:数据库用户购物车列表json 缓存时间 15天 用户排序后购物车商品列表&#xff…

Android sensor列表和访问记录

命令: dumpsys sensorservice 1.dumpsys sensorservice查看最近申请记录 dumpsys sensorservice命令输出Previous Registrations. Previous Registrations: 23:07:43 0x00000008 pid16587 uid10397 packagecom.start.testdemo.ui.udfp.fql.XsqFQLActivity samplingPeriod66…

智慧分流:探索互联网与物联网的负载均衡技术

数字化时代&#xff0c;个人认为&#xff0c;无论是互联网还是物联网&#xff0c;还是其他网&#xff0c;在各个层级&#xff0c;都对系统的稳定性和效率提出了更高的要求。负载均衡技术作为保障系统平稳运行的关键&#xff0c;其重要性不言而喻。在数字世界的海洋中&#xff0…

仅靠独立网站也能赚到100万,真的太牛了

你听说过 Photopea 吗&#xff1f;这是一个免费的类似 Photoshop 的图像编辑器。 这个项目&#xff1a; 每月1300万访问量每月150万用户使用小时每月10万美元的广告收入 Photopea 项目的天才创造者是 Ivan Kutskir。 令人惊讶的是&#xff0c;他独自处理了每日50万用户&…

gt9x双击唤醒屏幕

里面可以看到irq 和 rst的gpio引脚从设备树获取失败&#xff0c;排查设备树发现是属性名写错了&#xff1a; c &i2c1 {status "okay";goodix_ts5d {compatible "goodix,gt9xx";reg <0x5d>;// tp-size <89>;touchscreen-size-x <12…

JINGWHALE WH 迭代思维法:科学优化问题解析、任务策略规划与高效工作汇报的赋能艺术

JINGWHALE 对此论文相关未知以及已知概念、定理、公式、图片等内容的感悟、分析、创新、创造等拥有作品著作权。未经 JINGWHALE 授权&#xff0c;禁止转载与商业使用。

怎样搭建serveru ftp个人服务器

首先说说什么是ftp&#xff1f; FTP协议是专门针对在两个系统之间传输大的文件这种应用开发出来的&#xff0c;它是TCP/IP协议的一部分。FTP的意思就是文件传输协议&#xff0c;用来管理TCP/IP网络上大型文件的快速传输。FTP早也是在Unix上开发出来的&#xff0c;并且很长一段…

混淆矩阵-召回率、精确率、准确率

混淆矩阵 1 混淆矩阵2 混淆矩阵指标2.1 准确率2.2 精确率2.3 召回率2.4 特异度2.4 假正率2.5 假负率2.6 F1 分数 3 总结 1 混淆矩阵 混淆矩阵是一种用于评估分类模型性能的重要工具。它通过矩阵形式清晰地展示了模型对样本进行分类的结果&#xff0c;帮助我们理解模型在不同类…

第十七篇——交叉熵:如何避免制订出与事实相反的计划?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 任何事情&#xff0c;都需要我们制订计划执行计划&#xff1b;而制订计划…

AI 能否自行设计和制造芯片?

一、背景 AI在芯片设计和制造方面的潜力极其巨大&#xff0c;可以从以下几个方面探讨&#xff1a; 芯片设计阶段 自动化设计优化&#xff1a; AI可以实现芯片架构的自动化设计和优化&#xff0c;通过机器学习算法探索庞大的设计空间&#xff0c;找到性能、功耗、面积等方面的…

软件测试---基础知识

目录 一、概念 1、需求 2、测试用例 3、软件错误--BUG 4、软件生命周期 5、软件开发模型 6、测试模型 7、软件测试生命周期 二、基础 1、描述一个bug 2、定义bug的级别 3、bug的生命周期 4、开始第一次测试 5、解决争执 三、测试用例基础知识 1、用例基本要素 …

k8s实战案例之部署nginx+Tomcat+nfs实现动静分离

​​​​​ k8s实战案例之部署NginxTomcatNFS实现动静分离 1、基于镜像分层构建及自定义镜像运行Nginx及Java服务并基于NFS实现动静分离 1.1、业务镜像设计规划 根据业务的不同&#xff0c;我们可以导入官方基础镜像&#xff0c;在官方基础镜像的基础上自定义需要用的工具和…

结构设计模式 - 桥接设计模式 - JAVA

桥接设计模式 一. 介绍二. 桥接模式示例2.1 定义实现部分和具体实现2.2 定义抽象部分和细化抽象部分2.3 测试2.4 解释 三. 结论 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 一.…

爬虫初学篇

初次学习爬虫&#xff0c;知识笔记小想 目录&#x1f31f; 一、&#x1f349;基础知识二、&#x1f349;http协议&#xff1a;三、&#x1f349;解析网页(1) xpath的用法&#xff1a;(2) bs4解析器的解释&#xff1a;(3) python字符编码的错误&#xff1a;(4) 正则表达式&#…

HTML静态网页成品作业(HTML+CSS)——中华传统美德介绍网页(2个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;表格布局&#xff0c;未使用Javacsript代码&#xff0c;共有2个页面。…

python GUI开发: tkinter事件处理的几种方式详解与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…