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

效果图:代码:

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)
}

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

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

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

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

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

希望可以帮到大家;

好的,这里给出一个示例代码,需要用到 pandas 和 pyecharts 库。首先,我们需要先下载数据,我这里选择从国家统计局网站获取Excel表格,并保存为 "GDP.xlsx"。代码如下: ```python import pandas as pd # 读取Excel文件 df = pd.read_excel('GDP.xlsx') # 取出省份和年份列 provinces = df['地区'] years = df.columns[1:] # 取出近五年各省份的GDP数据 data = [] for i in range(len(provinces)): values = df.iloc[i, 1:].tolist() data.append(values) # 打印输出数据 print(provinces) print(years) print(data) ``` 接下来,我们使用 pyecharts 进行可视化展示。需要注意的是,由于时间线轮播图需要每个时间点的数据都是一个列表,因此我们需要将数据进行转置。代码如下: ```python from pyecharts.charts import Timeline, Map from pyecharts import options as opts # 转置数据 data = list(map(list, zip(*data))) # 创建时间线轮播图 timeline = Timeline() # 添加每个时间点的地图 for i in range(len(years)): map_data = [(provinces[j], data[i][j]) for j in range(len(provinces))] map_chart = Map() map_chart.add( series_name="", data_pair=map_data, maptype="china", is_map_symbol_show=False ) map_chart.set_global_opts( title_opts=opts.TitleOpts(title="{}年各省份GDP数据".format(years[i])), visualmap_opts=opts.VisualMapOpts(max_=max(data[i])) ) timeline.add(map_chart, "{}年".format(years[i])) # 渲染图表并保存 timeline.render("GDP_timeline.html") ``` 运行代码后,会生成一个名为 "GDP_timeline.html" 的文件,用浏览器打开即可看到时间线轮播图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值