返回顶部
首页 > 资讯 > 前端开发 > JavaScript >js实现滑动轮播效果
  • 169
分享到

js实现滑动轮播效果

2024-04-02 19:04:59 169人浏览 独家记忆
摘要

本文实例为大家分享了js实现滑动轮播效果的具体代码,供大家参考,具体内容如下 1、构建html样式,代码如下 <div class="banner">

本文实例为大家分享了js实现滑动轮播效果的具体代码,供大家参考,具体内容如下

1、构建html样式,代码如下


<div class="banner">
        <ul>
            <li>
                <a href="#" >
                    <img src="images/1.jpeg">
                </a>
            </li>
            <li>
                <a href="#" >
                    <img src="./images/2.jpg">
                </a>
            </li>
            <li>
                <a href="#" >
                    <img src="./images/3.jpg">
                </a>
            </li>
            <li>
                <a href="#" >
                    <img src="./images/4.jpg">
                </a>
            </li>
            <li>
                <a href="#" >
                    <img src="./images/5.jpg">
                </a>
            </li>
        </ul>
        <ol>
            
        </ol>
        <a href="#" class="left">&lt;</a>
        <a href="#" class="right">&gt;</a>
</div>

2、了解html基本结构 图片的路径可以根据自己来,把html结构用CSS样式简单修饰,代码如下


<style>
    *{
        padding: 0;
        margin: 0;
        list-style: none;
        text-decoration: none;
        color:#000;
    }
    .banner{
        width: 500px;
        height: 300px;
        margin:50px auto;
        position: relative;
        border:1px solid #000;
        overflow:hidden;
    }
    .banner ul{
        position: absolute;
        left: 0;
        top: 0;
        height: 300px;
        
    }
    .banner ul li{
        width: 500px;
        height: 300px;
        float:left;
    }
    .banner ul li a img{
        width: 500px;
        height: 300px;
    }
    .banner ol{
        
        height: 20px;
        position:absolute;
        bottom:10px;
        background-color: rgba(255,255,255,.7);
        left:50%;
        transfORM: translateX(-50%);
        border-radius:10px;
        display: flex;
        justify-content: space-evenly;
        align-items: center;
    }
    
    .banner>a{
        width: 20px;
        height: 40px;
        position:absolute;
        top:50%;
        transform: translateY(-50%);
        background-color: rgba(10,10,10,.5);
        font-size:20px;
        color:#fff;
        line-height: 2;
        text-align: center;
    }
    .banner>a.left{
        left: 0;
    }
    .banner>a.right{
        right: 0;
    }

3、基本布局结束后用js来实现轮播,代码如下


var div = document.querySelector('.banner');
var ul = document.querySelector('ul');
var ol = document.querySelector('ol');
var left = document.querySelector('a.left');
var right = document.querySelector('a.right');
    // 设置一个变量index 作为下标的使用
var index = 1;
    // 遍历ul下面的li
for(var i=0;i<ul.children.length;i++){
    // 一个ul下面的li要对应一个下面的小圆点按钮
    // 创建同等数量的小圆点
    var li = document.createElement('li');
    setStyle(li,{
        width: "10px",
        height: "10px",
        "border-radius":"50%",
        "background-color": "skyblue"
    })
    // 把创建好的li 全部放到ol 这个大盒子里
    ol.appendChild(li);
}
    // ol这个大盒子本身是没有宽度的 我们要根据里面的小圆点数量 设置ol大盒子的宽度
ol.style.width = ol.firstElementChild.offsetWidth*ul.children.length*2 + 'px';
    // 设置一个变量 这个变量是代表有样式的那个小圆点
var that = ol.children[index-1];
//给ol第一个儿子设置红色
that.style.background = 'red';
// 实现滑动轮播更好的衔接,前后给ul各补一个li。
var lastLi = ul.lastElementChild.clonenode(true);
var firstLi = ul.firstElementChild.cloneNode(true);
// 把复制好的标签分别放在ul大盒子的前面和后面
ul.appendChild(firstLi);
ul.insertBefore(lastLi,ul.firstElementChild);
// 因为ul下面的子元素发生了变化 我们要给ul 设置相应的宽度
ul.style.width = ul.children.length*lastLi.offsetWidth + 'px';
// 因为我们滑动是从右往左滑动的 所以要给ul 的left值取负
ul.style.left = -ul.firstElementChild.offsetWidth + 'px';
// 设置变量 后面赋值给定时器
var timeId;
// 定义一个开关
var flag = true;
//右键点击
right.onclick = function(){
    // 如果开关没打开 就返回一个false
    if(!flag){
        return false;
    }
    // 并把返回值赋值给 开关 说明开关关闭 再次点击就没有效果
    flag = false;
    // 前面我们定义了一个index 每当我们点击一下就index++
    index++;
    // 调用 move 函数
    move(ul,{left:-index*ul.children[0].offsetWidth},function(){
        // 把需要做的事情放在运动结束后的函数里面
        // 首先我们要给index 进行判断 ul总共七个子元素 index对应的是ul子元素的下标 所以 index是不能超过 ul.children.length-1;
        if(index ==ul.children.length-1){
            // 如果index等于ul.children.length-1
            // 就重新给index赋值为1
            index = 1;
            // 并且也要给ul 的left值重新赋值
            ul.style.left = -index*ul.children[0].offsetWidth + 'px';
        }
        // 小圆点也要跟着图片一起动才行
        // 我们给图片对应的那个小圆点设置成变量that 因为小圆点本身会有样式 先给它设置样式为默认的
        that.style.backgroundColor = 'skyblue';
        // 对应的这个小圆点的样式就发生了变化
        ol.children[index-1].style.backgroundColor = 'red';
        // 样式转换成功后 在把含有样式的小圆点赋值为变量that
        that = ol.children[index-1];
        // 运动的最后面要把 开关打开 可以让右击再次打开
        flag = true;
    })
}
//左键点击
left.onclick = function(){
    if(!flag){
        return false;
    }
    flag = false;
    // 左点击是从左往右滑动的就变成了index--
    index--;
    move(ul,{left:-index*ul.children[0].offsetWidth},function(){
        if(index ==ul.children.length-1){
            index = 1;
            ul.style.left = -index*ul.children[0].offsetWidth + 'px';
        }
         // 进入事件后首先判断 index的 值
        if(index==0){
            // 如果index的值变成0就重新给index赋值
            index = ul.children.length-2;
            // 并且重新给ul的left赋值为第二张图片的值
            ul.style.left = -index * firstLi.offsetWidth + "px"
        }
        that.style.backgroundColor = 'skyblue';
        ol.children[index-1].style.backgroundColor = 'red';
        that = ol.children[index-1];
        flag = true;
    })
}
// 遍历ol下面的所有li
for(let i=0;i<ol.children.length;i++){
    // 点击小圆点事件
    ol.children[i].onclick = function(){
    if(!flag){
        return false;
    }
    flag = false;
    // 因为小圆点的下边比 图片的下标少1 在小圆点点击事件中就要给index重新赋值
    // 让小圆点和图片能对应上
    index = i+1;
    move(ul,{left:-index*firstLi.offsetWidth},function(){
            // if(index == 0){
            //     index = ul.children.length-2
            //     ul.style.left = -index.ul.children[0].offsetWidth + 'px'
            // }
            that.style.backgroundColor = 'skyblue';
            ol.children[index-1].style.backgroundColor = 'red';
            that = ol.children[index-1];
            flag = true;
        })
    }
};
    // 自动轮播 
    timeId = setInterval(function(){
        if(!flag){
            return false;
        }
        flag = false;
        index++;
        move(ul,{left:-index*firstLi.offsetWidth},function(){
            if(index == ul.children.length-1){
                index = 1
                ul.style.left = -index*ul.children[0].offsetWidth + 'px'
            }
            that.style.backgroundColor = 'skyblue';
            ol.children[index-1].style.backgroundColor = 'red';
            that = ol.children[index-1];
            flag = true;
        })
    },2000);

    // 鼠标划过轮播停止
    div.onmouseover = function(){
        clearInterval(timeId);
    }

    //鼠标离开后 在进行自动轮播
    div.onmouseout = function(){
        timeId = setInterval(function(){
            if(!flag){
                return false;
            }
            flag = false;
            index++;
            move(ul,{left:-index*firstLi.offsetWidth},function(){
                if(index == ul.children.length-1){
                    index = 1
                    ul.style.left = -index*ul.children[0].offsetWidth + 'px'
                }
                that.style.backgroundColor = 'skyblue';
                ol.children[index-1].style.backgroundColor = 'red';
                that = ol.children[index-1];
                flag = true;
            })
        },1000);
    };
//封装好的多运动函数
function move(ele,obj,fn){
            let timeObj = {};
            for(let attr in obj){
                timeObj[attr] = setInterval(function(){
                    var target = parseFloat(obj[attr]);
                    if(attr === 'opacity'){
                        target*=100
                    }
                    var t = parseFloat(getStyle(ele,attr));
                    if(attr === 'opacity'){
                        t *=100
                    }
                    console.log(t)
                    if((target-t)/100>0){
                        var percent = Math.ceil((target-t)/100);
                    }else{
                        var percent = Math.floor((target-t)/100);
                    }
                    t += percent;
                    if(attr === 'opacity'){
                        ele.style[attr] = t/100 
                    }else{
                        ele.style[attr] = t + 'px';
                    }
                    if(t == target){
                        clearInterval(timeObj[attr])
                        delete timeObj[attr]
                        let k = 0;
                        for(let i in timeObj){
                            k++;
                        }
                        if( k==0){
                            fn();
                            console.log(123)
                        }
                    }
                },10)
            }
        }

// 封装好的获取样式的函数
function getStyle(ele,attr){
    if(window.getComputedStyle){
        return window.getComputedStyle(ele)[attr];
    }else{
        return ele.currentStyle[attr];
    }
}
// 封装设置样式的函数
function setStyle(ele,styleObj){
    for(var attr in styleObj){
        ele.style[attr] = styleObj[attr];
    }
};

4、轮播需要的图片如下

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: js实现滑动轮播效果

本文链接: https://lsjlt.com/news/136333.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • js实现滑动轮播效果
    本文实例为大家分享了js实现滑动轮播效果的具体代码,供大家参考,具体内容如下 1、构建html样式,代码如下 <div class="banner"> ...
    99+
    2024-04-02
  • js如何实现移动端手指滑动轮播图效果
    这篇文章将为大家详细讲解有关js如何实现移动端手指滑动轮播图效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如下所示:<!DOCTYPE html>...
    99+
    2024-04-02
  • js实现上下滑动轮播
    本文实例为大家分享了js实现上下滑动轮播的具体代码,供大家参考,具体内容如下 一、效果图 二、设计思路 第一步:遍历所有的元素使得鼠标点击右侧小图时,图片变亮并且根据偏移值加上红框...
    99+
    2024-04-02
  • jquery实现图片轮播和滑动效果
    本文实例为大家分享了jquery实现图片轮播和滑动效果的具体代码,供大家参考,具体内容如下 实习做了一个简易的图片轮播效果 下图是做出来的效果 源码 html 和 js部分 <...
    99+
    2024-04-02
  • 用js实现轮播图效果
    今天来说一下利用js实现轮播图效果,供大家参考,具体内容如下 思路 1.首先我们要把需要用到的元素获取过来 <div class="all" id='box'> ...
    99+
    2024-04-02
  • 纯js实现轮播图效果
    本文实例为大家分享了js实现轮播图效果的具体代码,供大家参考,具体内容如下 结合我们前面学过的:鼠标监听事件(移入移出、点击),创建节点,排他思想、定时器等,就可以实现一个能手动和自...
    99+
    2024-04-02
  • js实现3D轮播图效果
    本文实例为大家分享了js实现3D轮播图效果的具体代码,供大家参考,具体内容如下 主要有平移和旋转构成3d效果的轮播图,小白一只,不足之处还请大家多多指教,代码如下 css代码: ...
    99+
    2024-04-02
  • js实现新闻轮播效果
    本文实例为大家分享了js实现新闻轮播效果的具体代码,供大家参考,具体内容如下 原生js实现新闻轮播效果,附详细注释 <!DOCTYPE html> <html la...
    99+
    2024-04-02
  • js实现简单轮播图效果
    本文实例为大家分享了js实现简单轮播图效果的具体代码,供大家参考,具体内容如下 使用transform = translateX()实现的图片切换 <style> ...
    99+
    2024-04-02
  • JS如何实现touch点击滑动轮播
    这篇文章将为大家详细讲解有关JS如何实现touch点击滑动轮播,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体代码如下所示:<script src=&q...
    99+
    2024-04-02
  • js如何实现轮播图无缝滚动效果
    这篇文章主要介绍了js如何实现轮播图无缝滚动效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先文字说明一下:如果要展示5张图,分别为1,2...
    99+
    2024-04-02
  • 怎么实现js焦点轮播效果
    这篇文章将为大家详细讲解有关怎么实现js焦点轮播效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。效果如图:实现代码:<!DOCTYPE html>...
    99+
    2024-04-02
  • JS实现简单图片轮播效果
    本文实例为大家分享了JS实现简单图片轮播效果的具体代码,供大家参考,具体内容如下 实现效果 左右按钮可点击左右移动显示图片进行无缝滚动 下面的小圆圈点击可跳到对应...
    99+
    2024-04-02
  • js+css实现卡片轮播图效果
    本文实例为大家分享了js+css实现卡片轮播图效果的具体代码,供大家参考,具体内容如下 实现点击的时候切换卡片,自动轮播,鼠标移入暂停,移出继续轮播,有动画事件效果就是这样 下面是...
    99+
    2024-04-02
  • 纯js如何实现轮播图效果
    这篇文章主要介绍纯js如何实现轮播图效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果图代码 css * {    margin: 0;&nb...
    99+
    2023-06-25
  • js实现图片轮播切换效果
    最近在b站上学习的时候,学到了一个用原生js实现图片轮播切换效果的实战,码下来收藏 上图是这个小实战的效果图,整个小实战所实现的功能是图片自动轮播切换、点击上下键图片切换上下图片、...
    99+
    2024-04-02
  • 怎么使用js实现上下滑动轮播
    这篇“怎么使用js实现上下滑动轮播”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用js实现上下滑动轮播”文章吧。一、效...
    99+
    2023-07-02
  • 如何使用jquery实现图片轮播和滑动效果
    这篇文章主要介绍了如何使用jquery实现图片轮播和滑动效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下实习做了一个简易的图片轮播效果下图是做出来的效果源码ht...
    99+
    2023-06-26
  • JS中Swiper怎么实现轮播图效果
    这篇文章给大家分享的是有关JS中Swiper怎么实现轮播图效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Swiper是移动端的一款非常强大的触摸滑动插件,下面代码只展示一些常...
    99+
    2024-04-02
  • 原生js实现简单轮播图效果
    本文实例为大家分享了js实现简单轮播图效果的具体代码,供大家参考,具体内容如下 效果如下: 分析: 分析效果: 分析实现: 1、通过 document.querySelecto...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作