js 左右滑动切换图片

一、效果图 

 二、代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.0/css/all.min.css"><title>Document</title><style>* {margin: 0;padding: 0;box-sizing: border-box;}body {display: flex;align-items: center;justify-content: center;min-height: 100vh;background-color: #000;padding: 0 35px;}img {margin-left: 10px;width: calc(100%/3);height: 340px;object-fit: cover;}.wrapper{max-width: 1200px;position: relative;}.wrapper .carousel{white-space: nowrap;font-size: 0px;cursor: pointer;overflow: hidden;scroll-behavior: smooth;}.wrapper .carousel img:first-child{margin-left: 0px;}.carousel.dragging {scroll-behavior: auto;cursor: grab;}.carousel.dragging img {pointer-events: none;}.wrapper i {position: absolute;top: 50%;transform: translateY(-50%);height: 46px;width: 46px;text-align: center;line-height: 46px;cursor: pointer;border-radius: 50%;font-size: 1.2rem;background-color: #fff;}.wrapper i:first-child{left: -23px;display: none;}.wrapper i:last-child{right: -23px;}@media screen and (max-width: 900px) {.carousel img {width: calc(100% / 2);}}@media screen and (max-width: 550px) {.carousel img {width: 100%;}}</style>
</head>
<body><div class="wrapper"><i id="left" class="fa-solid fa-angle-left"></i><div class="carousel"><img src="https://pics6.baidu.com/feed/b7fd5266d0160924cbe5a630c4a608fde7cd3404.jpeg" alt="img" draggable="false"><img src="https://lmg.jj20.com/up/allimg/811/013015115633/150130115633-13-1200.jpg" alt="img" draggable="false"><img src="https://img1.baidu.com/it/u=3651966868,3530163192&fm=253&fmt=auto&app=138&f=JPEG" alt="img" draggable="false"><img src="https://img.zcool.cn/community/018dbb5c769407a801213f26cf080b.jpg@3000w_1l_2o_100sh.jpg" alt="img" draggable="false"><img src="https://img.zcool.cn/community/018dbb5c769407a801213f26cf080b.jpg@3000w_1l_2o_100sh.jpg" alt="img" draggable="false"><img src="https://img0.baidu.com/it/u=3299375624,640545767&fm=253&fmt=auto&app=138&f=JPEG" alt="img" draggable="false"><img src="https://img.zcool.cn/community/018dbb5c769407a801213f26cf080b.jpg@3000w_1l_2o_100sh.jpg" alt="img" draggable="false"><img src="https://netdisk.moyublog.com/free_wallpapers_files/bazr2n55k3t.jpg" alt="img" draggable="false"><img src="https://img.china.alibaba.com/img/ibank/2015/740/803/2379308047_603932725.jpg" alt="img" draggable="false"><img src="https://netdisk.moyublog.com/free_wallpapers_files/yljehh212re.jpg" alt="img" draggable="false"><img src="https://img.zcool.cn/community/018dbb5c769407a801213f26cf080b.jpg@3000w_1l_2o_100sh.jpg" alt="img" draggable="false"><img src="https://lmg.jj20.com/up/allimg/811/013015115633/150130115633-9-1200.jpg" alt="img" draggable="false"><img src="https://lmg.jj20.com/up/allimg/811/013015115633/150130115633-10-1200.jpg" alt="img" draggable="false"></div><i id="right" class="fa-solid fa-angle-right"></i></div>
</body>
</html>
<script>let carousel = document.querySelector('.carousel');let Oicon = document.querySelectorAll('.wrapper i')firstImg = carousel.querySelectorAll('img')[0]let isDrageStart = false,isDragging=false, prevPageX, prevScrollLeft,positionDiff;const dragStart = (e) => {isDrageStart = true;prevPageX = e.pageX || e.touches[0].pageX;prevScrollLeft = carousel.scrollLeft}const dragging = (e)=> {if (!isDrageStart) returne.preventDefault()isDragging = true;carousel.classList.add('dragging')positionDiff = (e.pageX ||  e.touches[0].pageX) - prevPageX;carousel.scrollLeft = prevScrollLeft - positionDiffshowIcon();}const dragStop = () => {isDrageStart = false;carousel.classList.remove('dragging')if(!isDragging) returnisDragging = falseautoSlide();}Oicon.forEach(element => {element.addEventListener('click', ()=> {let firstImageWidth = firstImg.clientWidth + 10  //加10因为图片的margin-left为10carousel.scrollLeft += element.id == 'left' ? -firstImageWidth : firstImageWidthsetTimeout(()=> showIcon(), 60)})});// 左右箭头的icon显示隐藏const showIcon = () => {let scrollWidth = carousel.scrollWidth - carousel.clientWidthOicon[0].style.display = carousel.scrollLeft == 0 ? 'none': 'block'Oicon[1].style.display = carousel.scrollLeft == scrollWidth ? 'none': 'block'}const autoSlide = () => {if(carousel.scrollLeft == (carousel.scrollWidth - carousel.clientWidth)) returnpositionDiff = Math.abs(positionDiff)let firstImgWidth = firstImg.clientWidth + 10 let valDifference = firstImgWidth - positionDiffif (carousel.scrollLeft > prevScrollLeft) {return carousel.scrollLeft += positionDiff > firstImgWidth / 3 ? valDifference : -positionDiff;}carousel.scrollLeft -= positionDiff > firstImgWidth / 3 ? valDifference : -positionDiff;}carousel.addEventListener('mousemove', dragging)  //当鼠标指针在指定的元素中移动时,就会发生 mousemove 事件。carousel.addEventListener('touchmove', dragging) //当用户在屏幕上移动手指时会发生 touchmove 事件carousel.addEventListener('mousedown', dragStart) //当鼠标指针移动到元素上方,并按下鼠标左键时,会发生 mousedown 事件carousel.addEventListener('touchstart', dragStart) //当手指触摸屏幕时候触发,即使已经有一个手指放在屏幕上也会触发carousel.addEventListener('mouseup', dragStop) //当鼠标指针移动到元素上方,并松开鼠标左键时,会发生 mouseup 事件carousel.addEventListener('mouseleave', dragStop) //当鼠标指针离开被选元素时,会发生 mouseleave 事件carousel.addEventListener('touchend', dragStop) //当手指从屏幕上离开的时候触发
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/3737.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode设置可以搜索包含node_modules中的文件

步骤3中删除掉node_modules&#xff0c;再搜索的时候&#xff0c;node_modules的匹配到代码也会展示出来了。 如果不想要被搜索文件包含node_modules,再添加上就可以。

MySQL 连接的使用

MySQL 连接的使用 在前几章节中&#xff0c;我们已经学会了如何在一张表中读取数据&#xff0c;这是相对简单的&#xff0c;但是在真正的应用中经常需要从多个数据表中读取数据。 ​ 本章节我们将向大家介绍如何使用 MySQL 的 JOIN 在两个或多个表中查询数据。 你可以在 SEL…

webstorm配置vue开发环境

&#x1f333;&#x1f333;&#x1f333;前言&#xff1a;本文章针对于如何用IDE和webstorm运行一个别人的vue项目进行步骤记录。 &#x1f4d9;参考&#xff1a;(10条消息) idea配置vue开发环境_idea配置vue运行环境_drinkworld的博客-CSDN博客https://blog.csdn.net/drinkwo…

容器生态系统概念讲解

容器生态系统 这张图显示了 Docker、Kubernetes、CRI、OCI、containerd 和 runc 在这个生态系统中是如何结合的。 其工作流程简单来说是这样的&#xff1a; Docker&#xff0c;Kubernetes 等工具来运行一个容器时会调用容器运行时&#xff08;CRI&#xff09;比如 containerd…

探索Java集合框架的奥秘

文章目录 1. 引言2. Java 集合框架概览2.1 Collection接口2.1.1 List接口(1) ArrayList&#xff08;数组&#xff09;(2) Vector&#xff08;数组实现、线程同步&#xff09;(3) LinkedList&#xff08;链表&#xff09; 2.1.2 Set 接口(1) HashSet&#xff08;Hash 表&#xf…

选择高考志愿:聚焦计算机科学与技术,规避土木工程

选择高考志愿&#xff1a;聚焦计算机科学与技术&#xff0c;规避土木工程 高考季已至&#xff0c;各地高考成绩陆续公布&#xff0c;许多毕业生和家长开始面临疑惑&#xff1a;如何填报志愿、选专业还是选学校、什么专业好就业&#xff1f;张雪峰曾提到&#xff1a;“普通家庭…

nvm 和 nrm安装使用

前端工具推荐&#xff1a;nvm&#xff08;Node 版本管理工具&#xff09; 和 nrm&#xff08;管理npm源&#xff09;&#xff1a; 一、nvm 1.1 nvm 是什么 1.2 安装 nvm 1.3 使用 nvm 二、nrm 2.1 nrm 是什么 2.2 安装 nrm 2.3 使用 nrm 一、nvm 如果直接将 node 安装到…

常见面试题之线程中并发锁(一)

1. 讲一下synchronized关键字的底层原理&#xff1f; 1.1. 基本使用 如下抢票的代码&#xff0c;如果不加锁&#xff0c;就会出现超卖或者一张票卖给多个人 Synchronized【对象锁】采用互斥的方式让同一时刻至多只有一个线程能持有【对象锁】&#xff0c;其它线程再想获取这…

Midjourney教程古风人像类

古风图像的特点&#xff1a; 人物发型多为飘逸的长发&#xff0c;或是精致的盘发&#xff1b; 人物服装多为飘逸的长袍、长裙&#xff1b; 整体画风以水墨、水彩、工笔为c主&#xff0c;线条写意&#xff0c;色彩清新淡雅&#xff1b; 背景中多用花鸟、亭台楼阁、桃林等构建氛…

INDEMIND双目视觉惯性模组实时生成点云并保存点云图

双目惯性相机最开始是从VINS中了解到的&#xff0c;2018年VINS中推荐过Loitor视觉惯性相机&#xff0c;但是后来看到GitHub Issue中有人反映Loitor丢帧、无技术支持等问题&#xff0c;加之购入渠道非官方故未入手Loitor&#xff0c;浏览知乎时关注到Indemind的该款产品&#xf…

FreeRTOS—任务基础知识

文章目录 一、FreeRTOS任务特性二、FreeRTOS任务状态三、FreeRTOS任务优先级四、FreeRTOS任务实现五、任务控制块六、任务堆栈 一、FreeRTOS任务特性 简单没有使用限制&#xff08;任务数量没有显示&#xff0c;一个优先级下可以有多个任务&#xff09;支持抢占&#xff08;高…

C语言结构体字节对齐(内存对齐)之#pragma pack和__attribute__((packed)的使用

在不使用#pragma pack和__attribute__((packed) 等选项来自定义字节对齐大小的情况下&#xff0c;关于正常字节对齐的描述&#xff0c;可参考博文&#xff1a; C/C计算类/结构体和联合体&#xff08;union&#xff09;所占内存大小&#xff08;内存对齐问题&#xff09;_联合体…