左右按钮实现滚动轮播Demo(js手搓版本)

提示:适用于当放置按钮空间区域有限,通过左右箭头实现有限空间放置更多的按钮的情形,自适应布局的简单Demo支持二次开发和改造

文章目录

  • 效果图
  • Demo源码
  • 解释说明
  • 总结


效果图

在这里插入图片描述
在该区域存在五个按钮,点击左边按钮向左边滚动,点击右边按钮向右边滚动。如果你想要这种Demo效果你可以接着往下看。


Demo源码

<!DOCTYPE html>
<html>
<head><style>.container {width: 86%;overflow: hidden; /* 隐藏超出容器宽度的内容 */white-space: nowrap; /* 禁止换行 */font-size: 0;/* 消除div之间的间距如果需要间距把这个删除 */display: inline-block;}.item {width: 31.3%; /* div宽度 */display: inline-block;font-size: 1rem;/* 字体大小 */color: white;/* 字体大小 */text-align: center;/* 内容居中显示 */cursor: pointer;/* 鼠标悬浮显示手 */margin-left: 1%;margin-right: 1%;}#leftBtn{margin-right: 1%;}#rightBtn{margin-left: 1%;}.active {border: 3px solid cornflowerblue;/* 选中时候展示样式 */}</style>
</head>
<body>
<div style="width: 30%; display: flex; justify-content:center; align-items: center;">
<button id="leftBtn" ></button><div class="container" ><div class="item" style="background-color: red;">一号</div><div class="item" style="background-color:lightpink;">二号</div><div class="item" style="background-color: green;">三号</div><div class="item" style="background-color: red;">四号</div><div class="item" style="background-color: purple;">五号</div></div>
<button id="rightBtn" ></button>
</div><script>var container = document.querySelector('.container');var leftBtn = document.getElementById('leftBtn');//获得左边按钮var rightBtn = document.getElementById('rightBtn');//获得右边按钮var itemWidth = container.offsetWidth;leftBtn.addEventListener('click', function() {container.scrollLeft -= itemWidth/3;});rightBtn.addEventListener('click', function() {container.scrollLeft += itemWidth/3;});var items = document.querySelectorAll('.item');items.forEach(function(item) {item.addEventListener('click', function() {// 移除其他选项卡上的 active 类名items.forEach(function(otherItem) {otherItem.classList.remove('active');});// 给点击的选项卡添加 active 类名item.classList.add('active');// 处理点击事件逻辑console.log('点击了', item.textContent);});});</script>
</body>
</html>

解释说明

  <script>var container = document.querySelector('.container');var leftBtn = document.getElementById('leftBtn');//获得左边按钮var rightBtn = document.getElementById('rightBtn');//获得右边按钮var itemWidth = container.offsetWidth;leftBtn.addEventListener('click', function() {container.scrollLeft -= itemWidth/3;});rightBtn.addEventListener('click', function() {container.scrollLeft += itemWidth/3;});var items = document.querySelectorAll('.item');items.forEach(function(item) {item.addEventListener('click', function() {// 移除其他选项卡上的 active 类名items.forEach(function(otherItem) {otherItem.classList.remove('active');});// 给点击的选项卡添加 active 类名item.classList.add('active');// 处理点击事件逻辑console.log('点击了', item.textContent);});});</script>

实现思路:
通过修改 container 元素的 scrollLeft 属性来实现左右滚动效果,将其减去或增加一个div的宽度,即为向左或向右滚动一个div的宽度,便捷算法就是直接算容器的1/3,当然我的需求是放三个按钮每次点击滚动一个,如果是三个按钮每次滚动两个那就是2/3了。如果使用里面div宽度计算,需要考虑外边距。也就是

var item = document.querySelector('.item');
var containerStyles = getComputedStyle(item);
var marginLeft = parseFloat(containerStyles.marginLeft);
var marginRight = parseFloat(containerStyles.marginRight);
var contentWidth = container.offsetWidth;
var totalWidth = marginLeft + marginRight + contentWidth;

offsetWidth 是一个 DOM 元素的属性,用于获取元素的可见宽度,它包括元素的边框(border)宽度、内边距(padding)宽度和元素的宽度(即可视区域的宽度)这三个部分的宽度之和。)


总结

因为是手搓的,能够随取随用,希望能够对你二次开发或直接取用有所帮助。不喜勿喷。
有更优化的方式欢迎分享。
在这里插入图片描述

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

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

相关文章

MySQL数据库,触发器、窗口函数、公用表表达式

触发器 触发器是由事件来触发某个操作&#xff08;也包含INSERT、UPDATE、DELECT事件&#xff09;&#xff0c;如果定义了触发程序&#xff0c;当数据库执行这些语句时&#xff0c;就相当于事件发生了&#xff0c;就会自动激发触发器执行相应的操作。 当对数据表中的数据执行…

如何选择数字化转型顾问

在进行数字化转型时&#xff0c;第一步也是最重要的一步是深刻了解你的业务需求&#xff0c;这一基本流程涉及对企业的目标、挑战和抱负进行全面分析。必须提出关键问题&#xff1a;你通过数字化转型寻求哪些具体结果?主要目标是优化运营效率、提升客户体验&#xff0c;还是使…

VueDraggablePlus - 免费开源的 Vue 拖拽组件,支持 Vue2 / Vue3,还被尤雨溪推荐了

今天在网上看到尤雨溪推荐的这款拖拽组件&#xff0c;试了一下非常不错&#xff0c;同样推荐给大家。 VueDraggablePlus 是一个专为 Vue 打造的拖拽排序模块&#xff0c;基于 Sortablejs 封装&#xff0c;支持 Vue3 或 Vue 2.7&#xff0c;本月的 21 日&#xff0c;Vue 作者尤…

从企业的角度看待WMS仓储管理系统的集成

随着全球化和数字化的发展&#xff0c;企业面临着越来越复杂的商业环境。为了满足高效运营的需求&#xff0c;许多企业开始寻求更先进、更集成的解决方案来优化他们的仓储流程。WMS仓储管理系统作为一种重要的解决方案&#xff0c;在企业中发挥着关键的作用。本文将从企业的角度…

通过外包团队迅腾文化灵活管理企业资讯内容输出,助力企业方对外信息的及时性与准确性

通过外包团队迅腾文化灵活管理企业资讯内容输出&#xff0c;助力企业方对外信息的及时性与准确性 随着信息时代的快速发展&#xff0c;企业信息的及时性和准确性对于企业的成功至关重要。外包团队迅腾文化以其灵活的管理方式&#xff0c;为企业提供了高效、准确的企业资讯内容…

速度与稳定性的完美结合:深入横测ToDesk、TeamViewer和AnyDesk

文章目录 前言什么是远程办公&#xff1f;远程办公的优势 远程办公软件横测对象远程软件的注册&安装ToDeskTeamViewerAnyDesk 各场景下的实操体验1.办公文件传输及丢包率2.玩游戏操作延迟、稳定3.追剧画质流畅度、稳定4.临时技术支持SOS模式 收费情况与设备连接数总结 前言…

开关电源测试 | 如何测试开关电源峰值负载功率?

开关电源峰值负载功率测试方法 测试设备&#xff1a; 1.电子负载&#xff1a;根据负载的额定电压和电流来选择。 2.功率计&#xff1a;需要考虑电源的额定电压和电流、测试频率等。 3.示波器&#xff1a;需要考虑测试频率和带宽等。 测试步骤&#xff1a; 1.将电源调整到正常工…

数据结构:图解手撕B-树以及B树的优化和索引

文章目录 为什么需要引入B-树&#xff1f;B树是什么&#xff1f;B树的插入分析B树和B*树B树B*树分裂原理 B树的应用 本篇总结的内容是B-树 为什么需要引入B-树&#xff1f; 回忆一下前面的搜索结构&#xff0c;有哈希&#xff0c;红黑树&#xff0c;二分…等很多的搜索结构&a…

单播、多播、广播、组播、泛播、冲突域、广播域、VLAN概念汇总

1 引言 “多播”可以理解为一个人向多个人&#xff08;但不是在场的所有人&#xff09;说话&#xff0c;这样能够提高通话的效率。如果你要通知特定的某些人同一件事情&#xff0c;但是又不想让其他人知道&#xff0c;使用电话一个一个地通知就非常麻烦&#xff0c;而使用日常…

谷歌发布Gemini 1.0,开启生成式AI模型新时代!

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; IT杂谈 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一. Gemini的发布前期1.1 Gemini的准备1.2 DeepMnid 二. Gemini的三大杀手锏2.1 多模态能力2…

AWS RDS慢日志文件另存到ES并且每天发送邮件统计慢日志

1.背景&#xff1a;需要对aws rds慢日志文件归档到es&#xff0c;让开发能够随时查看。 2.需求&#xff1a;并且每天把最新的慢日志&#xff0c;过滤最慢的5条sql 发送给各个产品线的开发负责人。 3.准备&#xff1a; aws ak/sk &#xff0c;如果rds 在不同区域需要认证不同的…

Apache RocketMQ 5.0 腾讯云落地实践

Apache RocketMQ 发展历程回顾 RocketMQ 最早诞生于淘宝的在线电商交易场景&#xff0c;经过了历年双十一大促流量洪峰的打磨&#xff0c;2016年捐献给 Apache 社区&#xff0c;成为 Apache 社区的顶级项目&#xff0c;并在国内外电商&#xff0c;金融&#xff0c;互联网等各行…

TSINGSEE青犀边缘AI计算基于车辆结构化数据的车辆监控方案

随着人工智能技术的不断发展&#xff0c;边缘AI技术逐渐成为智能交通领域的研究热点。其中&#xff0c;基于边缘AI的车辆结构化数据技术与车辆监控系统是实现智能交通系统的重要手段之一。为了满足市场需求&#xff0c;TSINGSEE青犀边缘AI智能分析网关/视频智能分析平台推出了一…

《代码随想录》--二叉树(一)

《代码随想录》--二叉树 第一部分 1、二叉树的递归遍历2、二叉树的迭代遍历3、统一风格的迭代遍历代码4、二叉树的层序遍历226.翻转二叉树 1、二叉树的递归遍历 前序遍历 中序遍历 后序遍历 代码 前序遍历 class Solution {public List<Integer> preorderTraversal(T…

opencv 入门二(播放视频)

环境配置如下&#xff1a; opencv 入门一&#xff08;显示一张图片&#xff09;-CSDN博客 用OpenCV播放视频就像显示图像一样简单。唯一不同的是&#xff0c;我们需要某种循环来读取视频序列中的每一帧。 源码如下&#xff1a; #include <iostream> #include <str…

实时时钟(RTC)的选择与设计:内置晶体与外置晶体的优缺点对比

实时时钟(RTC)作为一种具备独立计时和事件记录功能的设备&#xff0c;现已广泛应用于许多电子产品中&#xff0c;并对时钟的精度要求越来越高。根据封装尺寸、接口方式、附加功能、时钟精度和待机功耗等因素进行分类&#xff0c;市场上有各种种类的RTC产品可供选择。 而在设计…

epi 外延炉 简介

因半导体制造工艺复杂&#xff0c;各个环节需要的设备也不同&#xff0c;从流程工序分类来看&#xff0c;半导体设备主要可分为晶圆制造设备&#xff08;前道工序&#xff09;、封装测试设备&#xff08;后道工序&#xff09;等。 本文介绍影响着晶体管性能和可靠性的外延炉。 …

C#调用阿里云接口实现动态域名解析,支持IPv6(Windows系统下载可用)

电信宽带一般能申请到公网IP&#xff0c;但是是动态的&#xff0c;基本上每天都要变&#xff0c;所以想到做一个定时任务&#xff0c;随系统启动&#xff0c;网上看了不少博文很多都支持IPv4&#xff0c;自己动手写了一个。 &#xff08;私信可全程指导&#xff09; 部署步骤…

Vue 使用 js-audio-recorder 实现录制、播放、下载音频

Vue 使用 js-audio-recorder 实现录制、播放、下载 PCM 数据 Vue 使用 js-audio-recorder 实现录制、播放、下载 PCM 数据js-audio-recorder 简介Vue 项目创建下载相关依赖主界面设计设置路由组件及页面设计项目启动源码下载 Vue 使用 js-audio-recorder 实现录制、播放、下载 …

FPGA时序分析与时序约束(二)——时钟约束

目录 一、时序约束的步骤 二、时序网表和路径 2.1 时序网表 2.2 时序路径 三、时序约束的方式 三、时钟约束 3.1 主时钟约束 3.2 虚拟时钟约束 3.3 衍生时钟约束 3.4 时钟组约束 3.5 时钟特性约束 3.6 时钟延时约束 一、时序约束的步骤 上一章了解了时序分析和约束…