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

效果图:代码:

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

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

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

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

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

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

希望可以帮到大家;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双Token方案实现Token自动续期(基于springboot+vue前后端分离项目)

文章目录 前言一、双Token方案介绍1. 令牌类型与功能2.双Token方案的优点3.实现流程 二、具体实现1.后端实现1.1 jwt工具类1.2 响应工具类1.3 实体类1.4 过滤器1.5 controller1.6 启动类 2、前端实现2.1 登录页面2.2 index页面2.3 请求拦截器和响应拦截器 效果展示 前言 更多j…

【星座运势】本周财运分析,巨蟹座财富潜力大开!

大家好&#xff01;今天我们来谈谈巨蟹座本周的财富运势。经过调查和数据分析&#xff0c;我发现巨蟹座这周的财运潜力很大&#xff01;接下来&#xff0c;我将用通俗易懂的语言&#xff0c;通过代码说明&#xff0c;向大家展示巨蟹座的财富运势。 首先&#xff0c;我们需要通…

人工智能对零售业的影响

机器人、人工智能相关领域 news/events &#xff08;专栏目录&#xff09; 本文目录 一、人工智能如何改变零售格局二、利用人工智能实现购物体验自动化三、利用人工智能改善库存管理四、通过人工智能解决方案增强客户服务五、利用人工智能分析消费者行为六、利用 AI 打造个性化…

【javaEE-有关CPU进程和线程实现的并发编程及二者的区别】

&#x1f525;&#x1f525;&#x1f525;有关进程并发编程开发的成本问题 这次之前其实我们所有的写的程序都是使用单核心来运行的&#xff0c;但是一般我们的计算机都有很多核心&#xff0c;如果我们编程的时候&#xff0c;只使用一个核心的话&#xff0c;其实这是一个非常大…

使用源代码编译方式升级内核【笔记】

为什么要升级内核 升级内核有多个重要的原因,主要包括以下几点: 安全性:随着技术的发展,旧版本的内核可能会存在安全漏洞。黑客或恶意用户可能会利用这些漏洞进行攻击。升级内核可以修复这些已知的安全漏洞,从而提高系统的安全性。性能优化:新版本的内核通常会包含对性能…

打造成功的人力RPO项目:赢得市场赚取利润

人力资源外包(RPO)项目是当今企业在招聘和人才管理方面越来越倾向的选择。想要通过人力RPO项目赚钱&#xff0c;以下是一些关键的策略和步骤&#xff0c;帮助您进入这个市场并取得成功。 1. 建立专业的人力RPO服务 首先&#xff0c;要想在人力RPO项目中赚钱&#xff0c;必须建立…

9. 文本三剑客之awk

文章目录 9.1 什么是awk9.2 awk命令格式9.3 awk执行流程9.4 行与列9.4.1 取行9.4.2 取列 9.1 什么是awk 虽然sed编辑器是非常方便自动修改文本文件的工具&#xff0c;但其也有自身的限制。通常你需要一个用来处理文件中的数据的更高级工具&#xff0c;它能提供一个类编程环境来…

【CT】LeetCode手撕—20. 有效的括号

题目 原题连接&#xff1a;20. 有效的括号 1- 思路 模式识别 模式1&#xff1a;括号左右匹配 ——> 借助栈来实现 ——> Deque<Character> deque new LinkedList<>()模式2&#xff1a;顺序匹配 ——> 用 if 判断 具体思路 1.遇到左括号 直接入栈相应…

FPGA IO_BANK、IO_STANDARD

描述 Xilinx 7系列FPGA和UltraScale体系结构提供了高性能&#xff08;HP&#xff09;和 高范围&#xff08;HR&#xff09;I/O组。I/O库是I/O块&#xff08;IOB&#xff09;的集合&#xff0c;具有可配置的 SelectIO驱动程序和接收器&#xff0c;支持多种标准接口 单端和差分。…

JS中的延时操作setTimeout()和setInterval()

JS中&#xff0c;给我们提供两种延时操作的内置方法setTimeout()和setInterval()。setTimeout和setInterval方法都是挂载在javascript的window对象下&#xff0c;通过两个参数控制&#xff0c;第一个参数控制运行的表达式或方法&#xff0c;第二个参数表示延时的时间&#xff0…

【电路笔记】-共基极放大器

共基极放大器 文章目录 共基极放大器1、概述2、等效电路3、电流增益4、输入阻抗5、输出阻抗6、电压增益7、示例:电压、电流和功率增益8、总结1、概述 在本文中,我们将介绍双极晶体管放大器的最后一种拓扑,称为共基极放大器 (CBA)。 下面的图 1 显示了 CBA 的电气图,此处没…

vite-plugin-pwa 离线安装Vite应用

渐进式Web应用&#xff08;PWA&#xff09;通过结合 Web 和移动应用的特点&#xff0c;为用户带来更加流畅和快速的体验。且PWA支持离线访问能力&#xff08;访问静态资源本地缓存&#xff09;&#xff0c;极大提高了用户交互的流畅性&#xff0c;降低非必要的网络依赖。尤其适…

卡尔曼滤波源码注释和调用示例

卡尔曼滤波源码注释和调用示例 flyfish Python版本代码地址 C版代码地址 主要用于分析代码&#xff0c;增加了中文注释 import numpy as np import scipy.linalg""" 0.95分位数的卡方分布表&#xff0c;N自由度&#xff08;包含N1到9的值&#xff09;。 取自…

【JS重点15】原型对象概述

目录 一&#xff1a;构造函数缺陷 二&#xff1a;原型 1 原型是是什么 2 原型对象的作用 3 原型对象this指向问题 4 利用原型对象添加方法 给JS内置构造函数Array添加最大值方法 给JS内置构造函数Array添加求和方法 三&#xff1a;Constructor属性 四&#xff1a;如何…

情绪管理:大我则定,小我则乱(王阳明)

学了很多知识&#xff0c;却还是感物易动&#xff1f;如何让心回归中正&#xff1f;王阳明一言以蔽之&#xff1a; —— 大我&#xff0c;大我则定&#xff0c;小我则乱 保持心静的方法&#xff1a;有大爱&#xff0c;为大局着想

全球“抱团”美股,美股“抱团”AI

内容提要 过去一个月内&#xff0c;全球约有300亿美元新资金流入股票基金&#xff0c;其中高达94%投向了美国资产&#xff1b;一季度&#xff0c;海外投资者购入了1870亿美元美国公司债券&#xff0c;同比增长61%。 文章正文 尽管美国面临债务问题和大选带来的政治分歧&#…

单链表——AcWing.826单链表

单链表 定义 单链表是一种常见的数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点包含一个数据元素和一个指向下一个节点的指针。 运用情况 用于实现动态的数据存储和管理&#xff0c;例如实现栈、队列等其他数据结构。在需要频繁进行插入和删除操作时非常有用…

pdf文件怎么改变大小?在线快速压缩pdf的方法

pdf作为一种常用的文件格式&#xff0c;使用这种文件类型的好处在于不仅拥有更好的兼容性&#xff0c;还可以设置密码来保证安全性&#xff0c;防止未授权用户查看内容&#xff0c;所以现在导出文件展示都会采用这种格式的来做内容展示。当遇到pdf文件过大问题时&#xff0c;想…

Python虚拟环境的配置

前言&#xff1a; 本人一度被Python的虚拟环境的配置所困扰&#xff0c;前段时间抽空学习了一下&#xff0c;现在总结一下方法&#xff0c;供大家参考。 先使用winr打开命令行窗口。 展示所有虚拟环境 conda env list 创建虚拟环境 例如我们创建一个叫做py_sk的虚拟环境 …

MSPM0L1306快速创建可移动工程(一)

设置成文本文件 宏定义 __MSPM0L1306__