首页 > 其他分享 >分享一个类似轮播图的账号切换效果

分享一个类似轮播图的账号切换效果

时间:2024-06-01 22:10:54浏览次数:19  
标签:const 轮播 账号 items width 切换 carousel currentPage

看成品

首先完成一个轮播图

 <style>
  * {
      box-sizing: border-box;
  }

  .box {
      display: flex;
      height: 400px;
      overflow: auto;
      scroll-snap-type: x mandatory;      /* 横向滚动到一定程度,自动吸附反向上的下一个元素 */
      align-items: center;
  }

  .it {
      height: 200px;
      width: 200px;
      flex-grow: 0;
      flex-shrink: 0;
      scroll-snap-align: center;        /* 被吸附的时候, 自动在视图居中*/
      display: flex;
      justify-content: center;
      align-items: center;
  }
  .it:last-of-type, .it:first-of-type{
      width: calc((100% - 200px) / 2);       /* 用于占位, 确保下一张图片可以居中显示, 一个轮播图是200px的宽度,相当于给第一张轮播图加了左边距*/
  }

  .inner {
      transition: transform 0.3s;
      border-radius: 50%;
      height: 100px;
      width: 100px;
      transform: translateY(60px);
  }

  .active .inner {
      transform: scale(2) translateY(0); /* 放大效果 */
  }
  .box::-webkit-scrollbar {
      display: none;
  }

</style>
<div class="box" id="carousel">
    <div class="it"></div>       /* 用于占位, 确保下一张图片可以居中显示 */
    <div class="it">
        <img class="inner" src="img/img.png">
    </div>
    <div class="it">
        <img class="inner" src="img/img_1.png">
    </div>
    <div class="it">
        <img class="inner" src="img/img_2.png">
    </div>
    <div class="it">
        <img class="inner" src="img/img_3.png">
    </div>
    <div class="it">
        <img class="inner" src="img/img_4.png">
    </div>
    <div class="it"></div>    /* 用于占位, 确保下一张图片可以居中显示 */
</div>

<div id="currentPage" style="text-align: center">Current Page: 1</div>

js 主要处理,给吸附上的元素增加 .action

  <script>
    const carousel = document.getElementById('carousel');
    const items = carousel.children;

    const currentPageDisplay = document.getElementById('currentPage');

    function getCurrentPage() {
        let closestIndex = 0;
        let closestDistance = Infinity;

        for (let i = 1; i < items.length-1; i++) {
            const rect = items[i].getBoundingClientRect();
            const carouselRect = carousel.getBoundingClientRect()
            const distance = Math.abs(rect.left + rect.width / 2 - carouselRect.left - carouselRect.width / 2);
            if (distance < closestDistance) {
                closestDistance = distance;
                closestIndex = i;
                for (let i = 0; i < items.length; i++) {
                    items[i].classList.remove('active')
                }
                items[i].classList.add('active')
            }
        }

        return closestIndex
    }

    carousel.addEventListener('scroll', () => {
        const currentPage = getCurrentPage();
        currentPageDisplay.innerText = `Current Page: ${currentPage}`;
    });

    //第一次还没有滚动,所以不会正常的添加 .action, 需要在运行的时候加载一次 
    window.addEventListener('load', () => {
        const currentPage = getCurrentPage();
        currentPageDisplay.innerText = `Current Page: ${currentPage}`;
    });
</script>

标签:const,轮播,账号,items,width,切换,carousel,currentPage
From: https://www.cnblogs.com/adamr/p/18226480

相关文章

  • html中轮播图的做法及源码
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title>......
  • 转 Win10 共享文件夹、打印机。 使用微软账户登录共享文件夹,如何确认账号密码。
    目的是通过该方法实现了局域网内 共享目录给电视盒子,放在电视盒子使用。感谢不爱吃山楂大佬https://zhuanlan.zhihu.com/p/446872571   Win10共享文件夹、打印机。使用微软账户登录共享文件夹,如何确认账号密码。......
  • 达梦命令行使用管理员连接数据库 并切换活动数据库
    在达梦数据库中,管理员通常是指拥有SYSDBA权限的用户。要使用管理员身份连接数据库并切换到另一个数据库,你需要遵循以下步骤:退出当前会话:如果你已经在某个数据库上建立了连接,首先退出当前会话:quit;以管理员身份连接:使用以下格式以SYSDBA权限连接到数据库:sqlplus/n......
  • CentOS 7基础操作05_Linux查看及切换目录
    1、pwd命令——查看当前的工作目录(PrintWorkingDirectory)        pwd命令用于显示用户当前所在的工作目录位置,工作目录是用户操作文件或其他子目录的默认位置起点。使用pwd命令可以不添加任何选项或参数。例如,root用户在/root目录中执行pwd命令时若输出信息为/roo......
  • 漏洞复现1day(大量资产存在)方正畅享全媒体采编系统明文账号密码泄露
      0x01免责声明文章内容仅供日常学习使用,请勿非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,由使用者承担全部法律及连带责任,作者及发布者不承担任何法律及连带责任。如有内容争议或侵权,我们会及时删除。0x02漏洞描述方正电子在传媒行业3......
  • mac系统如何切换php版本
    brewinstallshivammathur/php/[email protected]安装的这个库安装8.1。8.3替换即可#卸载所有PHP版本brewuninstall--ignore-dependenciesphpbrewuninstall--ignore-dependenciesphp@7.4brewuninstall--ignore-dependenciesphp@8.1brewuninstall--ignore-dependen......
  • 通栏中不定数量的图片/轮播自适应宽高的简单示例
    最近接到一个需求,在一个页面会有多个通栏,每个通栏中会有不固定数量的图片或轮播图,要求各图片/轮播要同等比例自适应宽高,写成通用代码。示意图:光是图片好说,其中有swiper就会比较麻烦。代码:<divclass="container"><divclass="zt_banner"><divclass="swiper">......
  • Springboot配置文件中账号密码等敏感信息的加解密
    说明:使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性比较低。打开application.properties或application.yml,比如MySQL登录密码,Redis登录密码以及第三方的密钥等等一览无余。这里介绍一个加解密组件jasypt,用以提高配置文件中敏感配置数据的......
  • 容器组件Tabs如何自定义 tabBar-高亮切换
    1.TabBar如果放在底部的话,一般会显示图形和文字,甚至有特殊的图标,如果要实现此类效果,就需要自定义tabBarTabs(){TabContent(){//内容略}.tabBar(this.tabBarBuilder())}@BuildertabBarBuilder(){//自定义的Tabbar结构}2.自定义TabBa......
  • 微信小程序------轮播图------纵向轮播图
    页面结构<swiperindicator-color="white"indicator-active-color="#ff4c91"indicator-dotsautoplayinterval="3500"duration="1000"verticalcircular><swiper-itemwx:for="{{imgUrls}}"wx:key="......