左右按钮实现滚动轮播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)宽度和元素的宽度(即可视区域的宽度)这三个部分的宽度之和。)


总结

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

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

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

相关文章

查看git的帮助信息

说明 在cmd窗口、或者git Bash shell下执行git --help或者git -h命令&#xff0c;可以查看git的帮助信息。 执行git <command> --help命令可以查看某个命令的帮助信息&#xff0c;其中<command>表示某个具体的命令。 示例1&#xff1a;在git Bash shell下运行git…

新能源线束电接头气密测试快速工装

线束气密测试是新能源车生产过程中必须要测试流程&#xff0c;包括常规的电缆测试、电接头测试、接线端子测试等。需要用到相应的快速接头来密封连接线束一端&#xff0c;进行充气或封堵&#xff0c;并连接上检漏仪等相关设备&#xff0c;检查产品密封防水合格性。 线束快速密封…

Vue3 Element Plus自定义年份区间选择组件

环境&#xff1a; "dependencies": {"rollup/plugin-alias": "^3.1.9","types/node": "^17.0.43","element-plus": "^2.2.15","three": "^0.148.0","vue": "^3.2.…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Button按钮组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Button按钮组件 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、Button按钮组件 Button 组件也是基础组件之一&#xff0c;和其它基础组件不…

【深度学习】Prompt

1.Prompt的通俗解释 Prompt就是“提示”的意思&#xff0c;通俗解释可以参考你画我猜游戏。如下图所示&#xff1a;提示词就作为Prompt&#xff0c;指导对方说出正确答案。而自然语言处理任务中的Prompt也有同样的效果&#xff0c;指导模型输出正确的答案。 2.Prompt的不通俗解…

【密码学】群的证明(习题)

0.前置知识 1.习题 记录一次密码学作业~群的判定 2.求解

Linux发行版比较:Ubuntu、CentOS、Red Hat与其他系统的优劣分析

导言 Linux作为开源操作系统&#xff0c;有众多不同的发行版&#xff0c;每个发行版都有其独特的特性和适用场景。本文将聚焦于比较Ubuntu、CentOS、Red Hat和其他系统&#xff0c;深入分析它们的优势、用途以及在不同领域的应用。Linux操作系统的生态系统中&#xff0c;Ubuntu…

传输层—TCP核心机制(确认应答、超时重传、三次握手四次挥手、滑动串口等……)

传输层—TCP核心机制 ​ 文章目录 传输层—TCP核心机制TCP1.1 确认应答机制 (可靠传输机制)1.2 超时重传机制 (可靠传输机制)1.3 连接管理机制 (可靠传输机制)1.3.1 三次握手&#xff08;建立连接&#xff09;1.3.2 四次握手&#xff08;断开连接&#xff09; 1.4 滑动窗口 (提…

如何使用示波器探头对被测电路进行检测

对电路信号进行检测之前首先要知道被测电路是什么电路&#xff0c;被测信号是什么信号。盲目地测试或者使用不正确的测量方法&#xff0c;有可能得到错误的波形甚至损坏仪器危及安全。 1、什么是差分信号&#xff1f;什么是单端信号&#xff1f; 差分传输是一种信号传输的技术…

Selenium自动化测试框架(超详细总结分享)

设计思路 本文整理归纳以往的工作中用到的东西&#xff0c;现汇总成基础测试框架提供分享。 框架采用python3 selenium3 PO yaml ddt unittest等技术编写成基础测试框架&#xff0c;能适应日常测试工作需要。 1、使用Page Object模式将页面定位和业务操作分开&#xff…

SecureCRT for Mac/win强大安全的终端SSH工具,SecureCRT助您网络连接无忧

在当今数字化时代&#xff0c;网络连接已成为生活和工作中不可或缺的一部分。而对于需要进行远程访问和管理的用户来说&#xff0c;一个稳定、安全的终端SSH工具是至关重要的。SecureCRT作为一款强大的终端SSH工具&#xff0c;为用户提供了安全、高效的远程连接解决方案。 首先…

如何压缩视频发邮件?帮你整理了几个必备的!

不同邮件附件上限大小有所不同&#xff0c;QQ邮箱的附件大小限制为2GB&#xff0c;这意味着用户可以发送最大为2GB的视频文件&#xff1b;Gmail邮箱的附件大小限制为25MB&#xff1b;163邮箱的附件大小限制为2GB&#xff0c;但是为了保证文件传输的成功率&#xff0c;建议最好不…

SpringBoot 多环境开发配置文件

在开发过程中&#xff0c;往往开发环境和生产环境需要不同的配置。为了兼容两种运行环境&#xff0c;提高开发效率&#xff0c;可以使用多环境开发配置文件。 配置文件结构大概是这样&#xff1a; application.yml -主启动配置文件&#xff08;用于控制使用哪种环境配…

金和OA jc6 clobfield接口存在SQL注入漏洞

文章目录 产品简介漏洞概述指纹识别漏洞利用修复建议 产品简介 金和OA协同办公管理系统j6软件是一种综合性的协同办公解决方案&#xff0c;旨在提高企业内部的协作效率和工作效率。它提供了一系列功能和工具&#xff0c;帮助组织进行任务管理、日程安排、文件共享、团队协作和…

关于腾讯位置服务路线规划-微信小程序-插件未授权使用

我们点击添加插件会发现添加错误,主要是因为他说不开放给个人用户. 这是我们可以进入微信服务市场直接搜索腾讯位置服务路线规划 | 微信服务市场 (qq.com)点击添加插件即可完成

实战|Smartbi---意外的福利

目录 漏洞描述 影响版本 fofa语法 漏洞复现 构造poc 修复建议 本文由掌控安全学院 - beize 投稿 漏洞描述 Smartbi在安装时会内置几个用户&#xff0c;在使用特定接口时&#xff0c;可绕过用户身份认证机制获取其身份凭证&#xff0c;随后可使用获取的身份凭证调用后台…

统计分析绘图软件 GraphPad Prism 10 mac功能介绍

GraphPad Prism mac是一款专业的统计和绘图软件&#xff0c;主要用于生物医学研究、实验设计和数据分析。 GraphPad Prism mac功能和特点 数据导入和整理&#xff1a;GraphPad Prism 可以导入各种数据格式&#xff0c;并提供直观的界面用于整理、编辑和管理数据。用户可以轻松地…

三菱PLC FX3U滑动平均值滤波

三菱PLC滑动平均值滤波其它相关写法,请参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/125044013https://rxxw-control.blog.csdn.net/article/details/125044013滑动平均值滤波程序总共分为三部分,第一步为:滑动采样。 第二步为:队列求和,第三…

TypeScript 中的高级类型(联合、交叉、泛型、映射类型)

文章目录 一、联合类型&#xff08;Union Types&#xff09;二、交叉类型&#xff08;Intersection Types&#xff09;三、泛型3.1 泛型结合extends3.2 泛型结合 keyof3.3 extends keyof 和 in keyof 的区别 四、条件类型&#xff08;Conditional Types&#xff09; TypeScript…

德人合科技 | 公司电脑文件加密系统

公司电脑文件加密系统是一种可以对电脑文件进行加密的保护机制。它使用驱动层透明加密技术&#xff0c;能够在用户无感知的情况下对文件进行加密&#xff0c;从源头上保障数据安全和使用安全。 PC端访问地址&#xff1a; www.drhchina.com 此类系统主要有以下几个特点和功能&a…