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

原生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实现无缝轮播(包括面向对象的写法),包括实现思路。

计算文本相似度的常用算法

NLP、数据挖掘领域中,文本分析是一个很重要的领域,这有助于我们去让计算机理解语言的作用和使用。文本分析是数据挖掘的重要手段,利用文本分析,我们将很快的读取到一本书、一篇文章、一段话中的关键词和核心思想,而文本相似度就是我们用来剔除无用信息或者重复信息的重要手段,让计算机去找文本中的不同。 在生活中,信息检索、数据挖掘、机器翻译、文档复制检测等领域都应用到“文本相似度”。文本不仅仅是文字,文本相似度的应用更广,除了文字的匹配,还可以是图片、音频等,因为它们的实质都是在计算机中都是以二进制的方式存在的。相.

氧小氢的博客 2万+

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

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

qq_56337139的博客 2619

麒麟KylinV10系统yum源更换全攻略:从官方源到第三方仓库的保姆级教程

本文详细介绍了麒麟KylinV10系统yum源的更换与优化方法,包括官方源配置、第三方仓库集成及RPM包管理技巧。通过实战案例和命令示例,帮助用户快速解决软件依赖问题,提升系统管理效率。特别适合需要在国产操作系统上进行开发的工程师参考。

weixin_30752699的博客 648

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

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

杏子 2万+

FastGPT 引申:借鉴 FastGPT 基于MySQL + ES 实现知识库(含表结构以及核心代码)

FastGPT 引申:借鉴 FastGPT 基于MySQL + ES 实现知识库(含表结构以及核心代码)

蜗牛的专栏 3435

Silvaco Atlas从头开始(四)——定义材料参数和模型

这部分是关于定义材料参数和模型。

qsz1425AWD2121的博客 4650

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

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

weixin_33750452的博客 459

【2021末九软工边缘人保研】川大-中科院网络中心-华师夏令营+哈工大本-中科院网络中心-西交-厦大-中山-武大-北航预推免

2021末九软工边缘人保研记录一、写在前面二、个人背景 一、写在前面 2020年计算机保研可谓是诸神黄昏,卷的头破血流(指我等菜鸡)。疫情的原因,今年的夏令营和预推免基本全部改为线上,机试取消,能不能拿到offer基本完全取决于背景以及面试表现(当然也有个别头铁非要机试,甚至笔试的学校)。大佬们offer收割不停,我等边缘人只能看着一封封拒信发呆。 这种情况下,只有985 Rank5%以及211 Rank2%之前的大佬能够较为轻松地拿到面试入场券。贴一个上交电院夏令营要求你们感受一下: 预推免相比起夏令营

weixin_43222706的博客 4235

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

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

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

保姆级教程:在RK3588 Android12设备树(DTS)中配置MIPI 8 Lane双通道与DSC显示

本文详细介绍了在RK3588 Android12平台上配置MIPI 8 Lane双通道与DSC显示的实战指南。通过设备树(DTS)参数详解、DSC参数计算与PPS配置、双通道同步机制实现等内容,帮助开发者高效完成高分辨率屏幕驱动配置,解决嵌入式显示系统开发中的常见挑战。

weixin_30905133的博客 399

【智能车Code review】——小S与中S道路判断

基本思想: 找到中线的左拐点和右拐点,并且计算出两点之间的空间距离。通过限制空间距离,分为中S和小S。 注意这种情况:当20行以下的中线斜率比较陡,此时可以通过人为限制设定,将第0行的中线设置为拐点。 if (flag_centre_right_point == 0 && flag_centre_left_point == 1 && parameterB >= 0.5 && centre_left_point[0] >= 33) { .

hanhan的博客 6104

JavaScript项目实战-无缝轮播图

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

William_fang的博客 1095

PCL 点云八叉树射线相交

PCL 点云八叉树射线相交

dayuhaitang1的博客 850

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

Devexpress16.2.6破解工具

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

无缝轮播图

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

Ivanzn的博客 544

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

从传统动画到react动画过渡

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

qq_36320160的博客 115

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

原生 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、付费专栏及课程。

余额充值