原生JS实现移动端轮播图。

1、js原生实现移动端手指滑动轮播图效果 html> html lang="en"> head> meta charset="UTF-8"> meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> title>Docume 阅读详情

话不多说直接上代码。

html 结构

<div class="jd_banner">
    <!--图片-->
    <ul class="jd_bannerImg clearfix">
        <li>
            <a href="javascript:;">
                <img src="./uploads/l1.jpg" alt="">
            </a>
        </li>
        <li>
            <a href="javascript:;">
                <img src="./uploads/l2.jpg" alt="">
            </a>
        </li>
        <li>
            <a href="javascript:;">
                <img src="./uploads/l3.jpg" alt="">
            </a>
        </li>
        <li>
            <a href="javascript:;">
                <img src="./uploads/l4.jpg" alt="">
            </a>
        </li>
        <li>
            <a href="javascript:;">
                <img src="./uploads/l5.jpg" alt="">
            </a>
        </li>
        <li>
            <a href="javascript:;">
                <img src="./uploads/l6.jpg" alt="">
            </a>
        </li>
        <li>
            <a href="javascript:;">
                <img src="./uploads/l7.jpg" alt="">
            </a>
        </li>
        <li>
            <a href="javascript:;">
                <img src="./uploads/l8.jpg" alt="">
            </a>
        </li>
    </ul>
    <!--点标记-->
    <ul class="jd_bannerIndicator">
        <li class="active"></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
</div>

css样式

 <style>
        .jd_banner{
            width: 100%;
            overflow: hidden;
            position: relative;
        }
        /*.jd_bannerImg{
            width:800%;
        }*/
        .jd_bannerImg{
            width:800%;
            /*position: absolute;  如果使用absolute定位,会造成父容器无法获取由子元素的撑开的高度*/
            position: relative;
            /*添加默认偏移*/
            /*transform: translateX(-10%);*/
            /*使用定位:使用百分比的时候是参照父容器的宽度*/
            /* left: -100%;*/
        }
        /*.jd_bannerImg > li{
            width:12.5%;
            float: left;
        }*/
        .jd_bannerImg > li{
            width:12.5%;
            float: left;
        }
        .jd_bannerImg > li img{
            /*1.设置为块元素
            2.可以将文本的字体大小设置为0
            3.vertical-align:bottom*/
            display: block;
            width: 100%;
        }
        .jd_bannerIndicator{
            width: 128px;
            height: 10px;
            position: absolute;
            left: 50%;
            bottom: 5px;
            transform: translateX(-50%);
        }
        .jd_bannerIndicator > li{
            width: 6px;
            height: 6px;
            border-radius: 3px;
            border: 1px solid #fff;
            float: left;
            margin-left:10px;
        }
        .jd_bannerIndicator > li:first-of-type{
            margin-left:0;
        }
        .jd_bannerIndicator > li.active{
            background-color: #fff;
        }

    </style>

js

1.设置一下轮播的页面结构,以及获取一下需要用到的元素。

        /*获取轮播图结构*/
        var banner=document.querySelector(".jd_banner");
        /*获取图片容器*/
        var imgBox=banner.querySelector("ul:first-of-type");
        /*获取原始的第一张图片*/
        var first=imgBox.querySelector("li:first-of-type");
        /*获取原始的最后一张图片*/
        var last=imgBox.querySelector("li:last-of-type");
        /*在首尾插入两张图片   cloneNode:复制一个dom元素*/
        imgBox.appendChild(first.cloneNode(true));
        /*insertBefore(需要插入的dom元素,位置)*/
        imgBox.insertBefore(last.cloneNode(true),imgBox.firstChild);
        /*获取所有图片li元素*/
        var lis=imgBox.querySelectorAll("li");
        /*获取li元素的数量*/
        var count=lis.length;
        /*.获取banner的宽度*/
        var bannerWidth=banner.offsetWidth;
        /*设置图片盒子的宽度*/
        imgBox.style.width=count*bannerWidth+"px";
        /*设置每一个li(图片)元素的宽度*/
        for(var i=0;i<lis.length;i++){
            lis[i].style.width=bannerWidth+"px";
        }
        /*定义图片索引:图片已经有一个宽度的默认偏移*/
        var index=1;
        /*设置默认的偏移*/
        imgBox.style.left=-bannerWidth+"px";

2.实现自动轮播

var timerId;
        var startTime=function(){
            timerId=setInterval(function(){
                index++;
                imgBox.style.transition="left 0.5s ease-in-out";
                /*5.3 设置偏移*/
                imgBox.style.left=(-index*bannerWidth)+"px";
                /*5.4 判断是否到最后一张,如果是则回到索引1的位置*/
                setTimeout(function(){
                    if(index==count-1){
                        index=1;
                        imgBox.style.transition="none";
                        /*偏移到指定的位置*/
                        imgBox.style.left=(-index*bannerWidth)+"px";
                        indicators[count - 3].classList.remove('active');
                        indicators[0].classList.add('active');
                    }
                },500);
            },1000);
        }
        startTime();

3.实现点标记

 var indicators=banner.querySelector("ul:last-of-type").querySelectorAll("li");
        var setIndicator=function(index){
            /*先清除其它li元素的active样式*/
            for(var i=0;i<indicators.length;i++){
                indicators[i].classList.remove("active");
            }
            /*为当前li元素添加active样式*/
            indicators[index-1].classList.add("active");
        }

4.实现手动轮播

 var startX,moveX,distanceX;
        /*标记当前过渡效果是否已经执行完毕*/
        var isEnd=true;
        /*为图片添加触摸事件--触摸开始*/
        imgBox.addEventListener("touchstart",function(e){
            clearInterval(timerId);
            /*获取当前手指的起始位置*/
            startX= e.targetTouches[0].clientX;
        });
        /*为图片添加触摸事件--滑动过程*/
        imgBox.addEventListener("touchmove",function(e){
            if(isEnd==true){
                /*记录手指在滑动过程中的位置*/
                moveX= e.targetTouches[0].clientX;
                distanceX=moveX-startX;
                /*为了保证效果正常,将之前可能添加的过渡样式清除*/
                imgBox.style.transition="none";
                 /* 本次的滑动操作应该基于之前轮播图已经偏移的距离*/
                imgBox.style.left=(-index*bannerWidth + distanceX)+"px";
            }
        });
        /*添加触摸结束事件*/
        imgBox.addEventListener("touchend",function(e){
            /*松开手指,标记当前过渡效果正在执行*/
            isEnd=false;
            /*获取当前滑动的距离,判断距离是否超出指定的范围 100px*/
            if(Math.abs(distanceX) > 100){
                /*判断滑动的方向*/
                if(distanceX > 0){//上一张
                    index--;
                }
                else{ //下一张
                    index++;
                }
                /*翻页*/
                imgBox.style.transition="left 0.5s ease-in-out";
                imgBox.style.left=-index*bannerWidth+"px";
            }
            else if(Math.abs(distanceX) > 0){ //得保证用户确实进行过滑动操作
                /*回弹*/
                imgBox.style.transition="left 0.5s ease-in-out";
                imgBox.style.left=-index*bannerWidth+"px";
            }
            /*将上一次move所产生的数据重置为0*/
            startX=0;
            moveX=0;
            distanceX=0;
        });
        /*webkitTransitionEnd:可以监听当前元素的过渡效果执行完毕,当一个元素的过渡效果执行完毕的时候,会触发这个事件*/
        imgBox.addEventListener("webkitTransitionEnd",function(){
            console.log("webkitTransitionEnd");
            /*如果到了最后一张(count-1),回到索引1*/
            /*如果到了第一张(0),回到索引count-2*/
            if(index==count-1){
                index=1;
                imgBox.style.transition="none";
                imgBox.style.left=-index*bannerWidth+"px";
            }
            else if(index==0){
                index=count-2;
                imgBox.style.transition="none";
                imgBox.style.left=-index*bannerWidth+"px";
            }
            /*设置标记*/
            setIndicator(index);
            setTimeout(function(){
                isEnd=true;
                clearInterval(timerId);
                startTime();
            },100);
        });
原生js实现无缝滚动轮播图(移动端)-自动轮播 想不依赖任何插件和库,就用原生js实现移动端自动轮播,发现网上的都不尽如人意,干脆自己写一个,代码有部分参考,废话少说,上代码。 head部分,没什么好说的: &lt;meta charset="utf-8"&gt; &lt;meta name="copyright" content=""&gt; &lt;meta name="viewport" 阅读详情

相关推荐

1、js原生实现移动端手指滑动轮播图效果(2)

html> html lang="en"> head> meta charset="UTF-8"> meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0"> title>雲title> meta http-equiv="X-UA-Compatible

iceking66的博客 1238

【图片轮播】Vue如何实现移动端图片轮播效果,支持左右滑动(附图文及代码)

vue实现移动端图片轮播,移动端相册制作,vant3实现图片轮播效果,swipe轮播实现过程,swipe轮播组件实现照片轮播,vant3中swipe轮播组件应用。

赏樱看雪撸代码 1万+

移动端js原生无缝轮播图

移动端无缝轮播图 html代码: <div class="focus"> <ul> <li><img src="upload/focus.jpg" alt=""></li> <li><img src="upload/focus2.jpg" alt=""&gt...

weixin_43249993的博客 552

移动端的轮播图

next();

m0_63040701的博客 1160

牛耕式全覆盖算法-matlab代码

牛耕式路径全覆盖算法,也称为牛耕算法或者蚂蚁算法,是一种用于解决路径规划问题的启发式算法。这个算法的灵感来自于牛在耕田时的行为。在这个算法中,假设有一块田地需要耕作,牛从田地的某个角落开始行走,走过的路径会被标记。牛会优先选择尚未经过的路径,当所有的路径都走过后,算法停止。在路径规划问题中,田地可以看作是一个由节点和边构成的图。每个节点代表一个位置,每条边代表两个节点之间的连接。路径全覆盖问题是找出一组路径,使得每个节点都被至少一条路径经过。牛耕式路径全覆盖算法的基本思想是以启发式的方式逐步构建路径。

m0_69611489的博客 1689

头歌平台 操作系统课堂练习2.3:系统调用

使用 gdb 调试内核,跟踪到 main 函数入口的方法与之前实训一样。系统运行时,执行的前 3 个系统调用的编号和名字分别是什么?系统运行时,执行的前 3 个系统调用的编号和名字分别是什么?本关卡使用版本 1 内核进行分析,版本 1 内核文件存放在。为了完成本关任务,你需要:跟踪系统调用的发生。此时,系统调用号存放在寄存器 eax 中。

lazbuyaotoutu的博客 2万+

啥,ui叫我做一个移动端好看的轮播--异形的Slide

我的基础架构是 next.js+swiper。先看效果,得实现两边的缩放和无线滚动。

m0_66809099的博客 812

如何下载安装Qt各个版本?(2025-4-28更新)

本文将教您快速获取Qt各版本安装包!妈妈再也不用担心我找不到Qt安装包了!

程序区 5112

JS实现移动端的轮播图滑动事件

以上代码是一个基础示例,用于展示如何使用触摸事件来创建一个简单的滑动效果。对于更复杂的需求,你可能需要考虑使用现成的轮播图库,如Swiper、Slick等。在移动端实现轮播图滑动事件,我们通常使用。

ggq53219的博客 790

ALTERA MAX10 FPGA 串口远程升级实战:从原理到烧录的避坑指南

本文详细解析了ALTERA MAX10 FPGA如何通过串口实现远程升级。文章从工程师实战经验出发,深入剖析了MAX10片内Flash的双镜像备份原理、CONFIG_SEL引脚启动机制,并重点介绍了使用On-Chip Flash IP核进行擦写操作的核心流程。同时,提供了从Quartus工程配置、RPD文件生成、串口协议设计到驱动代码编写的完整避坑指南,旨在帮助开发者稳定、高效地完成远程升级功能部署。

weixin_29197699的博客 273

Vue项目实战:5分钟搞定高德地图离线部署(附避坑指南)

本文详细介绍了在Vue项目中实现高德地图离线部署的完整方案。针对内网或网络隔离环境,通过获取并改造JSAPI文件、下载组织地图瓦片数据,并集成vue-amap组件,实现地图功能的本地化运行。文中提供了核心代码、避坑指南及性能优化建议,帮助开发者快速构建稳定可靠的离线地图应用。

data3的博客 935

js-移动端轮播图

一、基本结构 1. html <div class="banner"> <ul class="lunbo clearfix"> <li><a href="#"><img src="uploads/banner3.jpg"></a></li> <li><a href="#"><img src="uploads/banner1.jpg"></

qq_61706112的博客 1097

FPGA实战:用Verilog实现Costas环载波同步(附Vivado2019.2仿真步骤)

本文详细介绍了如何在FPGA上使用Verilog实现Costas环载波同步,包括核心原理、Vivado2019.2工程配置、代码实现及仿真验证。通过正交下变频、相位误差检测和环路滤波等关键模块的设计,帮助开发者掌握数字通信系统中的载波同步技术,并提供了实用的调试和优化技巧。

k0l1m2n3o的博客 134

原生js实现简单的移动端轮播图效果

近期接触了移动端html5和css3,想加入些轮播图,于是在网上搜集整理了一些资料,经自己补充改进使之较为完善 原生JavaScript 移动端web轮播图片 实现功能 索引小圆点 过渡滑动动画的定时轮播 移动端可以滑动切换图片 滑动距离不够则吸附回去 效果图 代码 slideshow.html &lt;!DOCTYPE html&gt; &lt;html lang="en...

Zy的博客 5130

单细胞monocle3分析流程再整理

定义root cell, 推断拟时方向# 结合先验知识自定(示例数据)# 可视化示例数据,起点是随便点的。

zfyyzhys的博客 2100

4.6 知识库使用指南:如何让AI Agent拥有专业知识

本文介绍了如何为AI Agent构建和使用知识库。知识库的作用是为Agent提供专业知识,包含文档、数据和规则,可用于专业问答和知识检索。使用方法包括创建知识库(上传文档)、向量化处理、知识检索以及在Agent中的应用。核心要点是理解知识库的价值和使用流程。文章还提出了构建方法、检索优化和应用实践等思考题,建议准备高质量数据、优化检索效果并持续更新知识库。下节将介绍用LangGraph构建复杂AI应用。

yonggeit的博客 3008

原生js实现移动端Touch轮播图的方法步骤

Touch 轮播图 touch轮播图其实就是通过手指的滑动,来左右切换轮播图,下面我们通过一个案例,来实现下。 1. html 结构 结构上,还是用ul、li来存放轮播图片,ol、li来存放轮播小圆点: 2. 样式初始化 html的一些标签,都会有一些默认样式,比如body标签默认是有一个边距的,为了不影响美观,我们需要清除掉。 /* 清除标签默认边距 */ body,ul,li,ol,img ...

明月如霜丶 899

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

vue.js项目中用原生js实现移动端的轮播图

Vue.js项目中封装轮播图组件前言一、了解原生js移动端的事件 前言 今天我在vue.js项目实战开发过程中遇到了实现轮播图效果的问题,因为不想因为一个轮播图而引用整个jquery,而且我还发现自己根本就不清楚移动端的一些事件,所以我就进行了一些资料查找,并最终解决了这个问题,接下来跟大家分享一下我的解决问题的过程. 一、了解原生js移动端的事件 原生 ...

零一的博客 4266

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

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

html手机移动端轮播器,原生js实现移动端Touch轮播图的方法步骤

Touch 轮播图touch轮播图其实就是通过手指的滑动,来左右切换轮播图,下面我们通过一个案例,来实现下。1. html 结构结构上,还是用ul、li来存放轮播图片,ol、li来存放轮播小圆点:2. 样式初始化html的一些标签,都会有一些默认样式,比如body标签默认是有一个边距的,为了不影响美观,我们需要清除掉。/* 清除标签默认边距 */body,ul,li,ol,img {margin:...

weixin_39618456的博客 648

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

原生js实现移动端轮播图滑动切换

移动端手势 轮播图分析 自动轮播且无缝 [定时器、过渡动画] 分页器要随着图片的轮播而改变 [根据索引切换] 滑动效果 [touch事件] 图片随着分页器变化 滑动结束的时候,如果滑动的距离不超过屏幕的1/3,就恢复回去 [过渡] 滑动结束的时候,如果滑动的距离超过屏幕的1/3,就切换 [滑动方向 + 过渡]] html页面结构 &lt;!--轮播图--&gt; &lt;...

weixin_39976512的博客 4540

3、js原生实现移动端手指滑动轮播图效果(3)

html> html lang="en"> head> meta charset="UTF-8"> meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0"> title>3、js原生实现移动端手指滑动轮播图效果(3)title> meta http-

iceking66的博客 1434

原生 js 实现移动端 Touch 轮播图

Touch 轮播图 touch轮播图其实就是通过手指的滑动,来左右切换轮播图,下面我们通过一个案例,来实现下。 1. html 结构 结构上,还是用ul、li来存放轮播图片,ol、li来存放轮播小圆点: 2. 样式初始化 html的一些标签,都会有一些默认样式,比如body标签默认是有一个边距的,为了不影响美观,我们需要清除掉。 ...

weixin_33907511的博客 485

原生js实现简单移动端轮播图

最近项目不是很忙,自己就用原生js写了一个简单的移动端轮播图的小demo,可实现自动轮播和手势滑动轮播,然后就把它记录到个人博客里。还有很多不足的地方,希望多多指出,以便改进。 需要购买阿里云产品的,可以点击此链接购买,有红包优惠哦! https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=fp9ccf07 1、代码部分...

weixin_30293079的博客 90

手机端网页制作轮播图html怎么写,原生JS实现移动端web轮播图详解(结合Tween算法造轮子)...

前言相信大家应该都知道,移动端的轮播图是我们比较常见的需求, 我们最快的实现方式往往是 使用第三方的代码, 例如 swiper , 但当遇到一些比较复杂的轮播图需求时, 往往是束手无策,不知道怎么改.所以我们要尝试去自己造一些轮子, 以适应各种复杂多变的需求; 另外一点, 自己写的代码如果有bug是很容易修复的, 对自身的提高也很大.在没有阅读swiper源码的过程下,我尝试自己实现一个简易而不...

weixin_35786770的博客 1380

html拖动轮播判断当前第几个,原生JS实现移动端web轮播图详解(结合Tween算法造轮子)...

原生JS实现移动端web轮播图详解(结合Tween算法造轮子)发布时间:2020-09-19 21:30:05来源:脚本之家阅读:80作者:苦练内功前言相信大家应该都知道,移动端的轮播图是我们比较常见的需求, 我们最快的实现方式往往是 使用第三方的代码, 例如 swiper , 但当遇到一些比较复杂的轮播图需求时, 往往是束手无策,不知道怎么改.所以我们要尝试去自己造一些轮子, 以适应各种复杂多变...

weixin_33300279的博客 548
上一篇: 基于触屏事件来封装移动端的点击事件,解决click事件在移动端的延时问题。
下一篇: (初探PHP)一:开发环境配置,phpStudent基本使用
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值