史上最简单的无缝衔接轮播图

只用CSS跟HTML做出无缝衔接的轮播图效果 通过CSS3的animation动画属性,完成无缝衔接的轮播图效果 阅读详情

网上有大量关于使用原生js编写轮播图的例子,不得不说,他们的文章很棒,但是我发现一个缺点,就是他们的轮播图组件太过于完整,添加了很多按钮功能,代码量较大。掩盖了轮播图的最基本也是最重要的实现原理,很容易让新手摸不着头脑。

这篇文章的目的就是想用最少的代码,来讲解轮播图的实现原理,实现最基本的功能。等你学会了轮播图的实现后,至于之后怎么丰富轮播图,就是小菜一碟了

效果

这里写图片描述

思路

将图片放入列表中,使用CSS浮动使其排成一行,实现无缝衔接。外层为显示框,设置overflow属性使其只能显示一张图片。通过左移或右移整个列表达到图片滑动的效果。利用定时器实现自动轮播。

代码

html
代码很简单,一个div里面是个列表,每张图片都是一个列表项。本例为一个3张图片的轮播图,但你仔细看列表,会发现却有5个列表项,这是为什么呢?这是因为为了实现无缝衔接,防止出现滑动空白而特意设置的,在头部和尾部分别插入了最后一张图片和第一张图片,所以最后有3+2=5个列表项。

<body>
    <div id="box">
        <ul id="pic_list">
            <li class="item"><img class="pic" src="./3.jpg" /></li>
            <li class="item"><img class="pic" src="./1.jpg" /></li>
            <li class="item"><img class="pic" src="./2.jpg" /></li>
            <li class="item"><img class="pic" src="./3.jpg" /></li>
            <li class="item"><img class="pic" src="./1.jpg" /></li>
        </ul>
    </div>
    <div class="btn">
        <button id="prev">前一张</button>
        <button id="next">后一张</button>
    </div>
    <script src="main.js"></script>
</body>

css
样式中值得注意的是,外部div的宽度和高度要和图片一致,且必须设置其overflow:hidden属性,使其始终显示一张图片。列表项的float属性,使图片排成一行,而ul列表的宽度为500%正好对应于5张图片。

#pic_list{
    list-style: none;
    height: 300px;
    width: 500%;
    padding: 0;
    margin: 0;
    position: relative;
    top:0;
}

.pic{
    width: 400px;
    height:300px;
    padding: 0;
    margin: 0;
}

.item{
    float: left;
}

#box{
    width: 400px;
    height: 300px;
    overflow: hidden;
    margin: 0 auto;
    border: 1px solid black;
    position: relative;
}
.btn{
    margin: 10px auto;
    width: 150px;
}

js

const images = document.getElementById('pic_list'); //获取列表
let index = 1; //当前显示图片的索引
let length = document.getElementsByClassName('pic').length -2;  //获取图片的真实数量,不包括头尾插入的图片
var animateTimeId = null, toggleTimeId = null; //两个用于setInterval方法的Id变量
var distance = 0;  //页面滑动的距离

//初始化时,显示第一张图片,将列表左移400px
images.style.left = "-400px";

//核心代码 页面滑动动画
function animate(direction){
    if (! animateTimeId){  //当页面正在执行动画时,不能再触发动画
        const step = direction === 1 ? -10 : 10;  //确定向左滑还是向右滑
        animateTimeId = setInterval(function(){  
            distance += Math.abs(step);
            images.style.left = (parseInt(images.style.left) + step) + 'px';  //每次增加或减少一定值
            if (distance >= 400 ) { //当页面滑动的距离等于或大于图片的宽度时
                clearInterval(animateTimeId); //停止动画
                animateTimeId = null;
                distance = 0; 
                if (step < 0){  //计算滑动后页面的索引
                    index += 1;
                }else{
                    index -= 1;
                }
                if (index === 0){  //如果已滑到列表头部
                    index = length;
                    images.style.left = length * (-400) + 'px';  //将列表左移
                }else if (index === 4){  //如果已滑到列表尾部
                    index = 1;
                    images.style.left = '-400px'; //将列表右移
                }
            }
        }, 15);
    }
}

function Init(){ //初始化,绑定按钮事件,并启动自动轮播
    const nextButton = document.getElementById('next');
    const prevButton = document.getElementById('prev');
    const box = document.getElementById('box');

    nextButton.onclick = function(){
        animate(1);
    };
    
    prevButton.onclick = function(){
        animate(2);
    };

    box.addEventListener('mouseenter', function(){
        clearInterval(toggleTimeId);
        toggleTimeId = null;
    });
    
    box.addEventListener('mouseleave', function(){
        toggleTimeId = setInterval(function(){
            animate(1);
        },2500);
    });

    toggleTimeId = setInterval(function(){
        animate(1);
    },2500);
}

Init();

如果觉得这篇文章帮助了您,请打赏一个小红包鼓励作者继续创作哦!!!

在这里插入图片描述

用animation实现轮播图无缝衔接 使用animation实现轮播图的无缝衔接,分离图片动画和图片位移 阅读详情

相关推荐

js实现滑动轮播图

最近做项目总是只会调用别人做好的各种插件效果,想起很久没来自己写点小插件,久了会忘记的,就赶紧来补一下,前端程序员必备,实现一个js轮播图。 html代码: &lt;!DOCTYPE HTML&gt; &lt;head&gt; &lt;meta charset="utf-8"&gt; &lt;link rel="stylesheet" type="text/css" href=&qu

zhenzuo_x的博客 8699

用transition实现轮播图无缝衔接

轮播图无缝衔接,可左右切换,并设有节流,防止频繁点击

weixin_73640652的博客 1003

使用 HTML + CSS + JavaScript 实现无缝滚动轮播图

JavaScript 学习经典案例:使用 HTML + CSS + JavaScript 实现无缝滚动轮播图

Allen- 8278

js无缝轮播图,有过渡效果(详细解析)

此时需要注意,需要在判断中用到setTimeout延时器,过渡效果有几秒,延时器也要写几秒。因为有过渡效果,不然会有问题,要把过渡清除,设置延时器是把延时器的时间当做过渡去使用。1.无缝轮播思路:复制轮播图第一张到最后一张,当轮播图到最后一张时,需要判断,到第一张。

qq_59599812的博客 1865

【Web APIs】移动端轮播图案例 ( 轮播图自动播放 | 设置无缝衔接滑动 | 手指滑动轮播图 | 完整代码示例 )

一、移动端轮播图案例 1、需求说明 2、HTML 结构布局 4、轮播图自动播放 5、设置无缝衔接滑动 6、手指滑动轮播图 二、代码示例 - 移动端轮播图案例 1、代码示例 2、执行结果

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1726

使用JS实现图片轮播的实例(前后首尾相接)

下面小编就为大家带来一篇使用JS实现图片轮播的实例(前后首尾相接)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

如何快速实现一个无缝轮播效果

轮播图是我们前端开发中的一个常见需求,在项目开发中,我们可以使用element、ant等UI库实现。某些场景,为了一个简单的功能安装一个库是没必要的,我们最好的选择就是手搓。我们来看一个需求上述需求核心就是实现一个无缝轮播的切换效果。在本教程中,我们通过简单代码实现了无缝轮播效果,样式是左右切换,我们也可以通过样式控制实现上下切换的效果,比如将translateX设置为translateY即可。opacity: 0;

林恒的博客 1501

实现图片首尾平滑轮播(JS原生方法—节流)

首先给出HTML代码,要注意轮播图片表(#list)末尾加上第一个图片1.jpg,在首部加上最后一个图片5.jpg。 <!DOCTYPE html> <html lang=en> <head> <meta charset=UTF-8> <title>首尾轮播</title> <link rel=stylesheet href=首尾轮播.css rel=external nofollow > [removed][removed] </head> <body> <div id=container> <div id=list>

无缝轮播图Vue2 轮播图组件可拖拽无缝切换

此轮播图在普通轮播图的基础上优化,增加第一张切上一张接最后一张,最后一张切下一张接第一张,且无缝衔接的功能。增加拖拽切换功能;

huang_rui_min的博客 2056

活用QueryWrapper与@Select注解,构建MybatisPlus动态多表查询方案

本文深入探讨了如何结合MybatisPlus的QueryWrapper与@Select注解,构建高效灵活的动态多表关联查询方案。通过解析${ew.customSqlSegment}占位符机制,并设计通用的Service层封装,解决了复杂条件下多表查询的SQL拼接难题,显著提升了后台管理系统列表查询的开发效率与可维护性。

weixin_29291069的博客 271

告别‘线束丛林’:手把手拆解车身域控制器(BCM/PEPS/网关)的硬件选型与PCB布局要点

本文深入解析车身域控制器的硬件选型与PCB布局要点,涵盖主控MCU选择、通信接口设计、电源架构优化及EMC设计等关键环节。通过实战案例分享,帮助工程师解决高密度集成带来的电源完整性、热管理和信号隔离挑战,实现更稳定高效的汽车电子系统设计。

weixin_42567279的博客 395

html+css实现无缝衔接轮播图

无论是电商网站还是内容平台,轮播图都是最常见的前端组件之一。本文将用最通俗易懂的方式,带你从零实现一个支持自动播放、左右切换、无缝衔接的轮播图,即使你是刚入门的前端开发者也能轻松掌握!想象一组排队通过隧道的火车:这就是无缝轮播的核心思想!我们通过克隆第一个元素实现这种"视觉循环"。

L4的博客 883

并网逆变器学习笔记5---三电平DPWM

三电平DPWM

圆桌骑士的博客 1万+

Js原生实现无缝滑动轮播图(完整功能)

实现轮播图是前端学习的一门必修课,也是用来训练js能力。今天我用原生js写了个轮播图,包含无缝衔接、指示器、左右控制器等功能,跟大家分享。先看看效果图: 1. 设计html+css部分 结构很简单,图片部分用ul作容器(本人习惯ul,你们也可以div),flex布局让里面的li排成一排,因为我们要做的是滑动效果而不是简单显隐。注意,要在最后另外多一个li存放第一张图,这是为了后面实现无缝轮播。 ...

sxjit的博客 1万+

Vue+ECharts-GL 3D地图实战:5层叠加打造炫酷中国地图(附完整代码)

本文详细介绍了如何利用Vue和ECharts-GL构建具有强烈立体感的3D中国地图。通过5层图层的巧妙叠加与样式调校,实现了从背景阴影到交互高光的完整视觉层次,并整合了动态飞线与散点标记。文章提供了完整的代码实现、核心配置解析以及性能优化与视觉调优的实战技巧,帮助开发者快速打造专业级的交互式地图可视化应用。

d6e7f8g9h的博客 651

ENVI遥感技术

记录2024.03.06所遇到的遥感问题

qq_44453923的博客 4332

JavaScript之手把手教你做轮播图

我教你做的轮播图包括但不限于以下功能: 平滑滚动、定时滚动 + 点击滚动、防鼠标连续点击、第一张图与最后一张图无缝处理 如果你是在找轮播图怎么做的小白,那么恭喜你,找到我这儿,不用再换了,认认真真看完这篇文章,我保证你能做一个完整的轮播图。 而且我会以面向小白的简单通俗讲解,带大家做完轮播图,保证全程没有盲点。 不过前提是,有简单的jQuery基础和会用setTimeout()和setInterval()函数,这两个要求可以在我的其他博客里学习到。

跳探戈的小龙虾的博客 1万+

Python 爬虫实战:全国高校录取分数线数据爬取与院校对比分析

本文介绍了一个基于Python的高考志愿填报辅助系统,通过爬取掌上高考平台的全国高校录取分数线数据,构建本地数据库并实现智能分析。系统主要功能包括:1)使用requests+BeautifulSoup爬取院校基本信息和历年分省分科类录取线;2)通过SQLite实现数据持久化与增量更新;3)利用pyecharts生成分数线趋势图、院校对比雷达图等可视化图表;4)提供"冲稳保"三档智能选校推荐。技术栈涵盖网络爬虫、数据清洗、数据库管理和可视化分析,可为考生提供数据驱动的志愿填报决策支持。项目采用模块化设计,包含

u014481728的博客 238

无缝衔接的轮播图

当图片自动移动到最后一张时,立刻衔接到第一张 要点:img里多设置一张图,这张图和第一张图一样 <style> * { margin: 0; padding: 0; } img { vertical-align: top; } ...

weixin_43608739的博客 1246

顶级AI大模型白嫖ChatGPT Plus1个月,0成本薅顶配功能

Chat*** Plus限时免费1个月!原价20美元/月的顶配功能

BUG猿的博客 7278

ArcGIS Pro SDK (二十五)工作流管理器

【代码】ArcGIS Pro SDK (二十五)工作流管理器。

Winemonk 494

【学会轮播图这一篇文章就足够啦】JS 网页轮播图详解 自动播放+手动播放

轮播图已经成了页面开发中不可缺少的一部分,日常生活中随处都能见到轮播图的身影,例如平常我们购物的淘宝,京东等等,都靠着轮播图在一片 有限的区域内展现出更多的商品。这也是前端程序员最早接触到的练手小项目,这篇文章带大家透彻拿下轮播图!从此不再迷茫 首先我们来看一下本次案例的效果: (下面有请本人女朋友出境!话说我是在搞不明白 gif 图怎么设置,但总之就是该有的功能都有,不该有的功能也有(例如杀狗 hhhhh),自动播放,点击切换按钮切换图片,点击下方圆点切换图片均可实现,就不一一演示了,主要还是让..

weixin_52212950的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

纯 CSS 实现轮播图(自动切换、无缝衔接、小圆点切换)

纯 css 实现一个简单的轮播图

qq_53569667的博客 2万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

前端轮播图,无缝衔接

1.假设三张图片轮播,首先要把三张图放在一个div里,但只显示一张图            style="width:4560px">                                                                          .window{ height: 300px; width: 1140px;

qq_37779709的博客 1397

移动端轮播图(自动循环轮播、无缝衔接、短距离回弹、图片可拖动、拖动结束播放)

本案例轮播的图片为4个 第四张 第一张 第二章 第三张 第四张 第一张 index从1开始,通过index来使得装图片的容器,left=-(index-1)*屏幕宽度+'px' 通过定时器开启轮播 1、自动循环轮播和无缝衔接: (1)在四个图片前添四个图片的最后一张,四个图片的尾添加图片的第一张 使得轮播时,最后一张图片能自然切换到第一张 (2)无缝衔接(当原最后一张图片轮播到原首张时从首战开始轮播) 当原最后一张图片轮播到原首张时,关掉过渡动画,位移到原首张的距离 2、短距离回弹

weixin_43294560的博客 2672

原生js进阶版轮播图实现(走马灯效果,无缝衔接)

原生js实现轮播图,左右切换,走马灯效果,无缝衔接

qq_45117205的博客 1048
上一篇: 用两个栈实现队列(JS实现)
下一篇: js实现二叉查找树的建立、插入、删除、遍历操作
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值