关于无缝轮播图的一些思路

原生JS实现无缝轮播图。 点击事件,整体图片的来回切换。 阅读详情

关键思路:复制第一张图片放到ul的最后,然后当图片切换到倒数第二张的时候直接切换新加的那张图片,再次从第一张切换到第二张的时候先瞬间切换到第一张图片,然后滑动到第二张。

实现代码如下
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<style>
    *{
        padding: 0;
        margin: 0;
    }
    .box{
        width: 500px;
        height: 200px;
        overflow: hidden;
        margin: 50px auto;

    }
    .inner{
        width: 500px;
        height: 200px;
        position: relative;

    }
    .inner ul{
        width: 600%;
        list-style: none;
        display: inline-block;
        position: absolute;
    }
    li{
        float: left;
    }
    .inner ol{
        list-style: none;
        display: inline-block;
        position: absolute;
        right: 50px;
        bottom: 20px;
    }
    .inner ol li{
        width: 20px;
        height: 20px;
        background-color: #cf00ff;
        margin: 0 5px;
        text-align: center;
        line-height: 20px;
        border: 1px solid #bcff9f;
        cursor: pointer;
    }
    .selected {
        background-color: #F14400!important;
    }
</style>
<body>
<div id="box" class="box">
    <div id="inner" class="inner">
        <ul>
            <li><img src="images/1.jpg" alt=""></li>
            <li><img src="images/2.jpg" alt=""></li>
            <li><img src="images/3.jpg" alt=""></li>
            <li><img src="images/4.jpg" alt=""></li>
            <li><img src="images/5.jpg" alt=""></li>
        </ul>
        <ol></ol>
        <div>
            <span></span>
            <span></span>
        </div>
    </div>
</div>
<script>
    var box = document.getElementById('box');
    var inner = box.firstElementChild||box.firstChild;
    var ul = inner.firstElementChild||box.firstChild;
    var uliArr = ul.children;
    var ol = inner.children[1];
    var spanArr = ol.parentNode.children[2].children;

    //************无缝轮播给ul最后添加第一张图
    //思路:赋值第一张图片放到ul的最后,然后当图片切换到第五张的时候
    //     直接切换第六章,再次从第一张切换到第二张的时候先瞬间切换到
    //     第一张图片,然后滑动到第二张
    newul = ul.children[0].cloneNode(true);
    ul.appendChild(newul);

    //************给ol添加内容
    for (var i=0;i<uliArr.length-1;i++) {
        var newLi = document.createElement("li");
        newLi.innerHTML = i+1;
        ol.appendChild(newLi);
    }
    ol.children[0].className = ol.children[0].className + " selected";
    //************给每个ol中的li绑定事件
    var oliArr = ol.children;
    for (var i=0;i<oliArr.length;i++) {
        oliArr[i].index = i;
        oliArr[i].onclick = function(){
            key = this.index;
            square = this.index;
            carousel(ul,500*this.index);
            for (var i=0;i<oliArr.length;i++){
                oliArr[i].className = oliArr[i].className.replace(/\s?selected/,"");
            }
            console.log(square);
            oliArr[square].className = oliArr[square].className+" selected";

        };
    }

    inner.onmouseover = function () {
        clearInterval(timer)
    }
    inner.onmouseout = function () {
        timer = setInterval(autoPlay,1000)
    }

    //************轮播函数
    function carousel(ele,distance) {
        clearInterval(ele.timer);
        ele.timer = setInterval(
            function () {
                speed =distance- Math.abs(ele.offsetLeft)>0?-10:10;
                console.log(distance- Math.abs(ele.offsetLeft));
                if (Math.abs(distance - Math.abs(ele.offsetLeft))<Math.abs(speed)){
                   clearInterval(ele.timer)
                }else {
                    ele.style.left = ele.offsetLeft + speed  + "px";
                    console.log(ele.style.left )
                }
        },10)

    }

    //************自动播放function
    var key = 0;//轮播图的运动值
    var square = 0;//方块运动的值
    timer = setInterval(autoPlay,1000) ;

    function autoPlay() {
        key++;
        if (key > uliArr.length-1){
            ul.style.left = 0;
            key=1;
        }
        square++;
        if (square>uliArr.length-2  ){
            square = 0;
        }
        carousel(ul,key*500);
        for (var i=0;i<oliArr.length;i++){
            oliArr[i].className = oliArr[i].className.replace(/\s?selected/,"");
        }
        console.log(square);
        oliArr[square].className = oliArr[square].className+" selected";
    }
</script>
</body>
</html>
原生js实现无缝轮播图(面向对象思维) 原生js实现无缝轮播图(面向对象思维) 因为最近为了锻炼面向对象编程的思维,再加上以前写轮播图也有点小bug,所以就抽出时间重新写了一下轮播图 一 、核心的思路 将所有需要展示的图片连成一张“长”的图片 将图片放入一个 BOX 内并为 BOX设置 overflow: hidden属性 通过定时器动态的改变绝对定位的left值实现图片在BOX自左向右或者自左向右滑动的效果 二、难点 如何在自动播... 阅读详情

相关推荐

react 实现手机端首页无缝轮播

首先要注明一下本人是首次写js相关博客,如有什么错误的地方,还请大家多多指正!谢谢!!! 其中关于轮播部分有部分参考了一下这位前辈的代码,也是让我对无缝轮播有个清楚的概念,也很感谢这位前辈。 http://www.jianshu.com/p/1b1a06b579b2 目前掌握的概念: 实现轮播可以采用transform中的translate,左移为transform: tr

xrfxrf12345的博客 4141

完整无缝轮播图的原理和实现

无缝轮播图 原理: 首先需要一个装所有图片的盒子。然后通过移动装图片的盒子来使图片显示出来。 需要封装一个移动框架,在图片移动时有时间缓冲。 如果需要感觉图片移动时连贯的话,就需要将第一张图片复制一张到最后面,然后当图片切换到最后一张图片时候,立马将图片跳转至第一张,就会给我们一种图片是连贯的错觉。 需要用到的知识点:定位,浮动,动画,定时器 2.实现 <!DOCTYPE html> <html lang="en"> <head> .

ggbee_的博客 8480

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

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

Allen- 8278

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

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

qq_59599812的博客 1865

原生js实现无缝轮播(包括面向对象的写法)

原生js实现无缝轮播(包括面向对象的写法),包括实现思路。

解决Keil uVision许可证管理中Unknown Product错误

嵌入式开发中,IDE工具的许可证管理是确保开发环境正常运行的关键环节。Keil uVision作为ARM架构的主流开发工具,其许可证系统采用加密验证机制,通过产品版本识别实现授权控制。当出现Unknown Product错误时,通常源于版本兼容性问题或区域发行版差异,这直接影响开发工具链的可用性。特别是在维护历史项目或使用中国特供版时,开发者常会遇到此类问题。通过分析许可证类型、调整安装配置或建立虚拟化开发环境等工程实践方案,可以有效解决这类授权验证故障,保障嵌入式项目的持续集成与交付效率。

weixin_33743248的博客 363

html css js实现无缝轮播图思路及其实现

上图黄色方块代表轮播图的排列位置,默认图片从start开始,切换到end的时候再往后走一个图片的宽度,到达chang的位置。此时通过js把盒子的transition过渡属性的时间置为,然后让盒子的位置切换到start的位置(此时看不到过度动画),再通过js把盒子的过渡属性置为n秒(n为滚动时间),继续自动切换,此为一个循环。

qq_56337139的博客 2619

原生 JS 实现无缝轮播图(进阶版)

上一篇有讲到原生 JS 实现无缝轮播图基础版;这一篇主要实现进阶版,包括左右按钮点击功能以及指示灯功能。

杏子 2万+

别再被无限debugger卡住了!Chrome DevTools实战绕过技巧(含Hook与文件替换)

本文详细介绍了如何通过Chrome DevTools绕过无限debugger封锁的实战技巧,包括Hook技术与文件替换方法。针对常见的定时器轰炸、循环陷阱和动态注入等反调试手段,提供了高效的解决方案,帮助开发者快速突破调试障碍,提升爬虫和逆向工程效率。

weixin_30326515的博客 241

Python 包安装报错:ERROR: No matching distribution found for xxx 的全面排查指南

本文全面解析Python包安装时常见的`ERROR: No matching distribution found for xxx`报错。从检查包名拼写、网络与镜像源配置,到深入分析Python版本、操作系统等环境兼容性问题,提供了从简到繁的排查步骤。文章还介绍了使用`pip debug`、`-v`参数等高级诊断工具,并给出了更换包管理器、使用Docker等终极解决方案,帮助开发者高效解决依赖安装难题。

p8q9r0的博客 896

jQuery无缝轮播图思路详解-唯品会

效果图如上: 需求:图片自动轮播,鼠标移上停止播放,离开恢复播放,箭头切换图片。 html代码 <!--轮播图大盒子开始--> <div class="wrap"> <!--大盒子上部分轮播图--> <div class="wrapUp"> <ul> <...

weixin_33750452的博客 459

手把手教你用C++和NI-VISA写个简易仪器上位机(附QT工程配置)

本文详细介绍了如何使用C++和QT框架结合NI-VISA驱动开发跨平台仪器控制上位机软件。从Ubuntu环境配置、VISA通信核心架构设计到QT界面与业务逻辑解耦,提供了完整的实战指南和代码示例,帮助开发者快速构建专业级仪器控制程序。

weixin_42522374的博客 273

JavaScript篇:让图片舞动起来!手把手教你打造丝滑无缝轮播图

作为一名前端开发者,我经常被问到如何实现一个流畅的无缝轮播图。今天,我就把我的实战经验分享给大家,保证你看完就能自己动手实现一个!

欢迎来到我的前端博客!这里汇集了关于前端开发的最新技术、实用工具和经验分享。我将为你提供详细的教程、代码示例和实战案例,帮助你掌握Web开发的核心概念和技能。不论你是初学者还是有经验的开发者,这个博客都适合你。 803

ArcGIS与地理加权回归GWR【一】

因此,在实际问题研究中我们经常发现回归参数在不同地理位置上往往表现为不同,也就是说回归参数随地理位置变化,这时如果仍然采用全局空间回归模型(全局假设β是不会变得),得到的回归参数估计将是回归参数在整个研究区域内的平均值,如上所说某一个因素在ABC等不同的地理位置对房价的影响是不同的,假如采用全局空间回归模型,便忽略了数据的空间位置属性,只反映平均意义下因变量与自变量的相关关系,而不能有效反映回归关系的空间非平稳性的特征。当自变量为1个时,是一元线性回归,自变量为2个及以上时,称为多元线性回归。

JData_Engineer的博客 1374

国自然基金申请书撰写新思路:如何合理利用AI提高本子竞争力?

最后给大家推荐的400多所高校教师都在用的AI平台——高级学术版专业应用平台,集成了国际主流学术应用,以及ChatGPT、Claude、Gemini、Grok等Al大模型的高级版本平台,还有,可以辅助大家高效完成科研和学术写作任务,当然撰写硕博论文,课题、职称论文、国社科、国自然基金本子也是手拿把掐。创新点、技术路线、前期基础,但是我们也可以把写好的初稿交给AI,让它扮演资深研究员,帮我们精炼表述、优化段落结构,并揪出可能被评审追问的逻辑漏洞。,我们需要的是让它帮我们理清楚思路,而不是让它替我们完成内容。

智能AI让学术科研更容易 664

JavaScript项目实战-无缝轮播图

文章目录1.完整源码的下载地址2.无缝轮播图的代码思路3.功能设计4.核心代码 1.完整源码的下载地址 https://git.nowcoder.com/90589443/sameless-swiper 2.无缝轮播图的代码思路 ①通过DOM对元素id进行获取,得到各自的变量oList、oWrap。 ②利用innerHTML的方式进行li元素的复制。 ③定义变量,设置初始值。 ④利用定时器让多张图片进行位移,从而不断改变left的值。 ⑤由于定时器的代码会进行重复的利用,所以进行了相应的函数封装。 ⑥结合已

William_fang的博客 1095

OpenClaw 安装失败:npm install 多次报错的完整排错与解决方案

这次问题的最终解决,其实并不复杂,但关键在于思路的转变:从“脚本怎么又失败了”,切换为“npm 在这一层到底失败在哪里”。当我们手动复现安装过程、打开 verbose 日志、直面真实错误栈时,问题就不再是模糊的“安装不了”,而是一个可以被定位、被验证、被修复的具体工程问题。

博客 1万+

html轮播图无缝隙,html 无缝轮播图完整代码

无标题文档*{ padding:0; margin:0; list-style:none; border:0;}.all{width:500px;height:200px;padding:7px;border:1px solid #ccc;margin:100px auto;position:relative;}.screen{width:500px;height:200px;overflow:h...

weixin_39661405的博客 932

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

无缝轮播图

文章目录前言无缝轮播图写法一原理与实现步骤难点优缺点伪代码 前言 如有错误,欢迎批评指正! 无缝轮播图写法一 原理与实现步骤 无序列表的移动 列表的减速运动 无缝实现 锁(点击移动与默认移动的互锁) 难点 锁机制的设计、实现 列表的减速运动 优缺点 优点 缺点 思维难度小、容易实现 锁机制设计比较复杂 伪代码 <!-- html 代码 --> <div class="wrapper"> <!-- 无序列表 --> <ul>

Ivanzn的博客 544

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

从传统动画到react动画过渡

之前放假在家的时候,群里有一个朋友问我,有没有无缝轮播的思路,百度了一下,原来无缝轮播指的是传统轮播图中最后一张轮播图下一张是第一张轮播图,不会穿过中间的轮播图。 给个例子吧 同时放上codepen的...

qq_36320160的博客 115

原生 JS 实现无缝轮播图(基础版)

一、前言 轮播图是大多数网站与应用最常见的效果,实现轮播图并不复杂,但是要实现无缝轮播,则需要抓住关键点。本文用原生 JS 实现一个无缝轮播图。 二、实现轮播图的基本思路 布局: 1. 使用 flex 布局使子元素水平排列; 2. 子元素宽度设置100%,flex-shrink 设置为0(这个属性保证子元素不被压缩); 逻辑: 1. 轮播的核心原理是每隔指定的时间(比如1.5s)改...

杏子 5135

vue3-实现无缝滚动效果

vue3项目中使用到无缝滚动效果

weixin_44168040的博客 3716

JS写无缝轮播(干货!)

无缝轮播的主要思路是: 当前显示图片(1,2,3,4,5)为最后一张(5)且右按钮被点击时,在5后面接一张1(1,2,3,4,5,1)以保证图片位移方向的一致性,然后以0s的transform速度回到第1张(index:0),即在用户视觉查看不到的速度内换掉最后一张1(index:5)。当显示图片为第一张且左按钮被点击的时候,也是一样的道理,在1前面接一张5(5,1,2,3,4,5,1),然后在0秒内回到第五张(index:5)。 代码: <!DOCTYPE html> <htm

weixin_41174502的博客 361

javaScript小案例------js实现无缝轮播图效果篇

javaScript小案例------js无缝轮播图篇 原生js实现无缝轮播图

前端叶荨,随手记 2207

使用jQuery实现有移动效果的无缝轮播图

使用jQuery的动画效果实现无缝轮播图 第一次写博客,刚学jQuery做了个小Demo,写的不好的地方和有待提高的地方请大家提出来,接下来我们进入正题 设计思路 使用ul列表对图片进行排序,对li元素设置CSS浮动样式,设置ul的宽度等于所有图片的总长度,使图片水平排列,然后我们可以通过在js中设置定时器setInterval() 来使图片每隔固定时间自动朝一个方向移动。其中使用jQ的 ani...

aiyaiyayayaya的博客 572
上一篇: CSS中inline-block产生的间隙
下一篇: 子元素浮动后父元素因没有设置高度而塌陷
HarryMing
博客等级 码龄7年 11粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值