上效果图:

上代码:


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>scrollLeft</title>
    <style>
        h3,section{
            background-color: skyblue;
            padding: 10px;
            border-radius: 10px;
            margin-top: 20px;
        }
        section{
            padding-bottom: 20px;
        }
        
        .slide{
            display: block; 
            width: 500px;
            height: 300px;
            overflow: hidden;
        }
        .slide img{
            width: 100%;
            height: 100%;
            object-fit: cover;
            vertical-align: top;
        }
        .slide-wrap{
            position: relative;
            width: 500px;
        }
        .slide-wrap > .btn{
            position: absolute;
            width: 60px;
            height: 60px;
            background-color: #f1c40f;
            top: 110px;
            display: flex;
            justify-content: center;
            align-items: center;
        }
        .slide-wrap .left-btn{
            left: 0;
        }
        .slide-wrap .right-btn{
            right: 0;
        }
        /* 手撸个箭头 */
        .arrow{
            width: 30px;
        }
        .arrow div{
            height: 5px;
            background-color: #2c3e50;
        }
        .arrow-top , .arrow-bottom{
            width: 20px;
        }   
        .arrow-top{
            transform:rotate(-45deg) translateY(-4px)
        }    
        .arrow-bottom{
            transform:rotate(45deg) translateY(4px)
        }      
        .arrow-middle{
            width: 30px;
            transform:translateX(-1.5px)
        }
        /* 反转箭头 */
        .arrow-reverse{
            transform: rotate(180deg);
        }  
    </style>
</head>
<body>
    <h3>scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离</h3>
    <h3><b>当前元素必须设置 overflow: hidden;</b> scrollLeft 才会生效</h3>
    <h3>slide设置为display:flex时,谷歌不支持。 为了兼容浏览器,最好设置为block</h3>
    
    <!-- 这个容器只是为了加切换的按钮 -->
    <div class="slide-wrap">
        <!-- 主要切换区域 -->
        <div class="slide">
            <img src="./img/wly.jpg" alt="">
            <img src="./img/wsm.jpg" alt="">
            <img src="./img/wzz.jpg" alt="">
        </div>
        <div class="btn left-btn" id="slidePrevious">
            <div class="arrow">
                <div class="arrow-top"></div>
                <div class="arrow-middle"></div>
                <div class="arrow-bottom"></div>
            </div>
        </div>
        <div class="btn right-btn" id="slideNext">
            <div class="arrow arrow-reverse">
                <div class="arrow-top"></div>
                <div class="arrow-middle"></div>
                <div class="arrow-bottom"></div>
            </div>
        </div>
    </div>
    <section>
        <p>画个箭头</p>
        <div class="arrow">
            <div class="arrow-top"></div>
            <div class="arrow-middle"></div>
            <div class="arrow-bottom"></div>
        </div>
        <p>反转箭头</p>
        <div class="arrow arrow-reverse">
            <div class="arrow-top"></div>
            <div class="arrow-middle"></div>
            <div class="arrow-bottom"></div>
        </div>
    </section>
   
    
        
    <script>
        let slide = document.getElementsByClassName("slide")[0];
        let len = document.getElementsByClassName("slide")[0].children.length;
        
        let i = 0;
        let func = function(){
            if(i==len){
                i=0;
            }
            slide.scrollTop = i*300;
            i++;
        }
        
        let timer = setInterval(func,5000)
        let slideWrap = document.getElementsByClassName("slide-wrap")[0];
        slideWrap.addEventListener("mouseover",function(){
            clearInterval(timer);
        },{capture:true})
        slideWrap.addEventListener("mouseout",function(){
            timer = setInterval(func,5000);
        },{capture:true})
        // 左右切换
        let previous = document.getElementById("slidePrevious");
        let next = document.getElementById("slideNext");
        previous.addEventListener("click",function(){
            if(i==0){
                console.log("nothing");
                i = len-1;
                slide.scrollTop = i*300;
                return
            }else{
                i--;
                console.log(i);
                slide.scrollTop = i*300;
            }
           
        },{
            capture:true
        })
        next.addEventListener("click",function(){
            if(i==(len-1)){
                console.log("nothing");
                i=0;
                slide.scrollTop = i*300;
                return
            }else{
                i++;
                slide.scrollTop = i*300;
            }
          
        },{
            capture:true
        })
    </script>
</body>
</html>
 

由于加载的本地的图片,大佬们可以更改下图片地址,查看效果 。

js - 使用 scroll属性手撸轮播图 —— 无缝连接,更丝滑的更多相关文章

  1. vue.js学习之better-scroll封装的轮播图初始化失败

    vue.js学习之better-scroll封装的轮播图初始化失败 问题一:slider组件初始化失败 原因:页面异步获取数据很慢,导致slider初始化之后,数据还未获取到,导致图片还未加载 解决方 ...

  2. 简单的 js手写轮播图

    html: <div class="na1">   <div class="pp">    <div class="na ...

  3. Js封装的动画函数实现轮播图

    ---恢复内容开始--- 效果图说明:当鼠标移到哪一个按钮上的时候会自动跳转到某一张图片上,并且按钮会以高亮显示 项目目录结构 用到的js封装的animate()动画         function ...

  4. 原生JavaScript(js)手把手教你写轮播图插件(banner)

    ---恢复内容开始--- 1.轮播图插件 1.什么是插件: 为已有的程序增加功能 2.插件的特点(为什么要做成一个插件)与注意事项: 1.通用性,可移植性强 2.兼容性:不会对其他代码产生影响 3.创 ...

  5. 告别组件之教你使用原生js和css写移动端轮播图

    在工作中由于项目需要要写一个轮播图,本想使用组件直接调用实现快速开发,但是一想到自己经常使用组件但是让自己手写的话确实一点都不会. 一个不会手写组件的前端程序员不是一个好程序员!于是打算自己手写一个. ...

  6. 原生js用div实现简单的轮播图

    文章地址 https://www.cnblogs.com/sandraryan/ 原生js实现轮播图. 打开页面图片自动轮播,点击prev next按钮切换到上/下一张图片,点击1-5切换到对应图片. ...

  7. 每天一个JS 小demo之韩雪冬轮播图。主要知识点:html,css布局,对于数组和对象的理解和运用

    @charset "utf-8"; /* CSS Document */ ;; } li { list-style: none; } img { border: none; } b ...

  8. 原生js轮播图

    //用原生js实现了一个简单的轮播图效果 <!DOCTYPE html><html> <head> <meta charset="UTF-8&quo ...

  9. 原生js实现一个简单的轮播图

    想锻炼一下自己的原生js能力可以从写一个轮播图开始,轮播图的运用想必大家都知道吧,好了废话不多说,开始记笔记了,一些需要注意的点,我都在代码中标注了 首先是构造html: <div id=&qu ...

  10. React视角下的轮播图

    天猫购物网站最显眼的就是轮播图了.我在学习一样新js库,一个新框架或新的编程思想的时候,总是感叹"入门必做选项卡,进阶须撸轮播图."作为一个React组件,它是状态操控行为的典型, ...

随机推荐

  1. MinIO客户端之ls

    MinIO提供了一个命令行程序mc用于协助用户完成日常的维护.管理类工作. 官方资料 mc ls 列出本地硬盘上的文件,命令如下: ./mc ls 控制台的输出,如下: [2023-12-14 23: ...

  2. 5 款开源热搜项目「GitHub 热点速览」

    随着 2023 年的结束,我们也迎来了 2024 年的第一个工作日,新的一年就让「GitHub 热点速递」陪你一起进入工作状态吧! 说到上周的 GitHub 热搜项目就不得不提一下,一周飙升了 8 千 ...

  3. IDEA Edit Configuration解决隐藏了不见了

    IDEA Edit Configuration解决隐藏了不见了 IDEA Edit Configuration解决隐藏了不见了,我的IDEA版本是2020.3.4,某天按了哪个快捷键导致不见了.按Al ...

  4. 【Solve】InnerClass annotations are missing corresponding EnclosingMember annotations. Such InnerClass annotations are ignored

    问题: 今天Android项目在build时出现了下面的警告: InnerClass annotations are missing corresponding EnclosingMember ann ...

  5. 9个GaussDB常用的对象语句

    摘要:本文介绍了9个GaussDB常用的对象语句,希望对大家有帮助. 本文分享自华为云社区<GaussDB对象相关语句>,作者:酷哥. 1. 常用函数 pg_database_size() ...

  6. WebKit三件套(2):WebKit之JavaScriptCore/V8

    WebKit作为一个浏览器引擎,其中Javascript实现包括JavaScriptCore和V8,为了能更全面的了解WebKit,我们需要深入的了解Javascript实现的基本原理.其在WebKi ...

  7. 基于jdk自带httpserver开发的最小完整MVC框架

    基于jdk自带httpserver开发的最小完整MVC框架 410kb级的完整MVC:solon(83k) + jdkhttp(27k) + enjoy(227k) + snack3(73k) DEM ...

  8. 报错 PEP 8: expected 2 blank lines, found 1

    PyCharm 提示:PEP 8: expected 2 blank lines, found 1 类或方法前需要空两行 解决方法:Ctrl+Alt+L 格式化一下就OK了.或者手动在前面敲一行

  9. PPT 动画-旋转唱片

    插入图片.同心圆 按Shift 先点击背景图片,再点击 同心圆 合并形状,选择相交 设置动画,选择 陀螺旋,持续时间为 8秒, 打开计时窗口,重复为:直到幻灯片末尾

  10. linux 实时刷新显示当前时间

    同步阿里云时间 ntpdate ntp1.aliyun.com 使用watch命令:周期性的执行一个命令,并全屏显示. watch -n 1 date 即可:每1秒刷新date命令. # 格式 wat ...