轮廓图【HTML+CSS+JavaScript】

给大家分享一个很好看的轮播图,这个也是之前看到别人写的效果感觉很好看,所以后面也自己实现了一下,在这里分享给大家,希望大家也可以有所收获

轮播图效果:

视频效果有点浑浊,大家凑合着看,大家有什么好的截视频方法推荐我一下吧,非常感谢,孩子太难了

 

轮播图功能:

  • 轮播图会有一个向左移动的视野效果
  • 点击右边图片会向左更新
  • 点击左边图片会向右更新
  • 点击右边箭头会向左更新
  • 点击左边箭头会向右更新
  • 使用鼠标在图片上进行悬停,图片不会自动更新 
  • 使用鼠标在小点上进行滑动,图片更新到对应的图片上

js实现思路:

获得我们的dom类:

下面有注释解释,大家结合注释进行理解

        // 小圆点的父类
        let dotul = document.querySelector('.dot ul')
        // 图片
        let one = document.querySelector('.one')
        let three = document.querySelector('.three')
        // 我们图片的大框架
        let carousel_map = document.querySelector('.carousel-map')
        // 左边箭头
        let lefticon = document.querySelector('.lefticon')
        // 右边箭头
        let righticon = document.querySelector('.righticon')
        // 图片的父ul
        let ul = document.querySelector('.ul-img')
        // 左边图片的位置
        let leftbox = document.querySelector('.leftbox')
        // 右边图片的位置
        let rightbox = document.querySelector('.rightbox')
小圆点:

动态添加图片下的小圆点,使用for循环使用createElement()创建li元素,然后将创建的li添加到ul当中,但是因为我们显示的有图片和圆点进行绑定,所以我们要给一个小圆点添加上一个不一样的样式,突出该圆点和图片的关联性,最开始我们要初始化一个小圆点,保证它可以和我们的第一个显示的图片相照应,这里我们首先显示的是第二个图片,所以在这里我们定义一个变量j为1,就是让我们的第二个小圆点进行显示,color()方法是给我们的小圆点上色的方法

//添加小点点
   for (let i = 0; i < parts.length; i++) {
      let li = document.createElement('li')
      // 添加自定义属性
      li.setAttribute('index', i)
      dotul.appendChild(li)
    }
    let j = 1
    dotul.children[j].className = 'change'
    function color() {
      for (let i = 0; i < parts.length; i++) {
        dotul.children[i].className = ''
      }
        dotul.children[j].className = 'change'
      }

大家可以注意到我们的j变量是有范围的,也就是0-5,我们应该对 j 进行一些处理,所以我们需要写一个函数进行管理

function inspect() {
      if (j < 0) {
         j = 5
      } else if (j > 5) {
         j = 0
        }
      }

轮播图移动方法 left() 和 right () :

首先我们先定义一个parts数组,为的是让我们的图片类名进行更换

let parts = ['one', 'two', 'three', 'four', 'five', 'six']

大家看到这里可能不太了解,大家可以看以下的这些css代码(就是对以上类名的一些css操作)

.one {
        transform: translateX(-100px) scale(0.9);
        /* 初始位置和大小 */
        transition: transform 0.6s ease-out;
        /* 设置平滑过渡 */
        z-index: 4;
      }

      .two {
        transform: scale(1);
        /* 初始位置和大小 */
        transition: transform 0.6s ease;
        /* 设置平滑过渡 */
        z-index: 6;
      }

      .three {
        transform: translateX(100px) scale(0.9);
        /* 初始位置和大小 */
        transition: transform 0.5s ease-out;
        /* 设置平滑过渡 */
        z-index: 3;
      }

      .four {
        opacity: 0;
        transform: scale(0.9);
        z-index: 1;
      }

      .five {
        opacity: 0;
        transform: scale(0.9);
        z-index: 1;
      }

      .six {
        opacity: 0;
        transform: scale(0.9);
        z-index: 1;
      }

我们为什么要这么写呢,因为我们的图片放在的 li 元素使用了绝对定位(大家从我下面的总代码中可以看到)这样就可以让我们的图片叠加到一起(绝对定位加上相对定位的效果),这样就方便我们对图片的操作了,然后我们对第一张图片和第三张图片进行位置移动,产生偏差的视觉效果,并且进行缩小操作,突出显示我们的第二张中间图片

下面是 我们分装图片进行向左更新和向右更新的方法

right()

对我们的parts数组进行后删前增,这样我们的第三个图片的类变成了two,two类就是我们的中间图片,这样在通过css的transform和transition就实现了我们视频中的那种效果,然后图片进行更换了,我们的图片下的小圆点高光也进行更换(因为向左和向右的逻辑是一样的,这里我就不重复赘述了)

         function right() {
          // 将最后一个元素推到数组的前面
          parts.unshift(parts[5]) // 移动最后一个到最前面
          parts.pop()
          for (let i = 0; i < parts.length; i++) {
            if (ul.children[i]) {
              // 确保子元素存在
              ul.children[i].setAttribute('class', parts[i])
            }
          }
          j++
          inspect()
          color()
        }
        function left() {
          // 将最后一个元素推到数组的前面
          parts.push(parts[0]) // 移动最后一个到最前面
          parts.shift()
          for (let i = 0; i < parts.length; i++) {
            if (ul.children[i]) {
              // 确保子元素存在
              ul.children[i].setAttribute('class', parts[i])
            }
          }
          j--
          inspect()
          color()
        }

鼠标悬停小圆点:

 关于悬停小圆点进行图片更新操作大概是这部分轮播图当中难的了,大家可能不太好理解,其实还是图片通过图片和

         dotul.addEventListener('mouseover', function (e) {
          if (e.target.tagName === 'LI') {
            let index = parseInt(e.target.getAttribute('index'))
            let now = parts.indexOf('two') // 获取当前显示的元素索引
            let dif = Math.abs(index - now) // 计算经过点与当前点的距离

            clearInterval(timer) // 清除定时器

            // 使用一个新的定时器来逐步移动
            if (index < now) {
              while (dif--) {
                left()
              }
            } else {
              while (dif--) {
                right()
              }
            }
            timer = setInterval(right, 1500) // 重新设置自动播放定时器
          }
        })

 

图片停止自动播放:

carousel_map是我们总体元素的父类,当鼠标悬停到上面时,就停止播放,当离开时,重启定时器,图片的自动更新

        carousel_map.addEventListener('mouseover', function () {
          lefticon.style.display = 'block'
          righticon.style.display = 'block'
          clearInterval(timer)
        })

        carousel_map.addEventListener('mouseout', function () {
          lefticon.style.display = 'none'
          righticon.style.display = 'none'
          clearInterval(timer)
          timer = setInterval(right, 1500)
        })

图片图标的点击事件:

        lefticon.addEventListener('click', function () {
          clearInterval(timer)
          left()
          timer = setInterval(right, 1500)
        })

        righticon.addEventListener('click', function () {
          clearInterval(timer)
          right()
          timer = setInterval(right, 1500)
        })

        leftbox.addEventListener('click', function () {
          clearInterval(timer)
          left()
          timer = setInterval(right, 1500)
        })

        rightbox.addEventListener('click', function () {
          clearInterval(timer)
          right()
          timer = setInterval(right, 1500)
        })

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows上安装Redis

1.下载Redis 下载有2中选择&#xff1a; 官方redis官方下载地址&#xff1a; https://redis.io/download&#xff0c; 选择适合Windows的版本下载。 redis 64位下载地址&#xff1a; https://github.com/ServiceStack/rediswindows/tree/master/downloads&#xff0c; 我们下…

计算机视觉实验一:图像基础处理

1. 图像的直方图均衡 1.1 实验目的与要求 (1)理解直方图均衡的原理与作用; (2)掌握统计图像直方图的方法; (3)掌握图像直方图均衡的方法。 1.2 实验原理及知识点 直方图均衡化是通过灰度变换将一幅图象转换为另一幅均衡直方图&#xff0c;即在每个灰度级上都具有相同的象素…

第8章 利用CSS制作导航菜单作业

1.利用CSS技术&#xff0c;结合链接和列表&#xff0c;设计并实现“山水之间”页面。 浏览效果如下&#xff1a; HTML代码如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>山水之间</title><…

dhcp池没有空闲ip导致手机无法获得ip

得到用户反馈&#xff0c;一个高速项目部的wifi无法接入&#xff0c;让排查原因。 反馈有的手机能接入&#xff0c;有的接入不了。查看ac界面发现有个终端获得的ip是169.254.xxx.xxx。 ip地址是169.254.96.17显然是手机打开wlan开关后&#xff0c;鉴权通过后dhcp过程&#xff0…

AJAX和JSON

一.AJAX技术 1.1 AJAX介绍 Ajax 即“Asynchronous Javascript And XML”&#xff08;异步 JavaScript 和 XML&#xff09;&#xff0c;是指一种创建 交互式、快速动态应用的网页开发技术&#xff0c;无需重新加载整个网 页的情况下&#xff0c;能够更新页面局部数据的技术。 通…

c++包装器/适配器 function--通俗易懂

1.为什么要有function 在下面的场景下 useF类模版要实例化出三份&#xff0c;影响效率 仿函数:c仿函数--通俗易懂-CSDN博客 lambda表达式&#xff1a;c lambda表达式--通俗易懂-CSDN博客 template<class F, class T> T useF(F f, T x) {static int count 0;cout <…

项目模块十五:HttpResponse模块

一、模块设计思路 存储HTTP应答要素&#xff0c;提供简单接口 二、成员变量 int _status; // 应答状态码 unordered_map<string, string> _headers; // 报头字段 string _body; // 应答正文 bool _redirect_flag; // 是否重定向信息 stri…

【sqlmap使用】

sqlmap简介 sqlmap 目录结构 sqlmap常用参数 sqlmap实现注入 测试注入点&#xff0c;检测到注入点后&#xff0c;直接爆数据库名 python sqlmap.py –u http://172.16.12.2/7/9/strsql.php --data "usernameadmin" --dbs注意sqlmap在使用过程中可能会出现几个需要…

Java已死,大模型才是未来?

作者&#xff1a;不惑_ 引言 在数字技术的浪潮中&#xff0c;编程语言始终扮演着至关重要的角色。Java&#xff0c;自1995年诞生以来&#xff0c;便以其跨平台的特性和丰富的生态系统&#xff0c;成为了全球范围内开发者们最为青睐的编程语言之一 然而&#xff0c;随着技术的…

Rust 力扣 - 59. 螺旋矩阵 II

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 使用一个全局变量current记录当前遍历到的元素的值 我们只需要一圈一圈的从外向内遍历矩阵&#xff0c;每一圈遍历顺序为上边、右边、下边、左边&#xff0c;每遍历完一个元素后current 我们需要注意的是如果上…

MFC工控项目实例二十八模拟量信号每秒采集100次

用两个多媒体定时器&#xff0c;一个定时0.1秒计时&#xff0c;另一个定时0.01秒用来对模拟量信号采集每秒100次。 1、在SEAL_PRESSUREDlg.h中添加代码 class CSEAL_PRESSUREDlg : public CDialo { public:CSEAL_PRESSUREDlg(CWnd* pParent NULL); // standard constructor&a…

用插值公式实现滚动进度条动画效果

我们在日常前端开发时在动画的选择上基本都是css&#xff0c;通过css的animation即可满足大部分的开发场景&#xff0c;如果遇到了特殊而比较不容易实现的效果就会考虑到用js来实现&#xff0c;而本次的主题&#xff0c;就是围绕用js来做一个比较不常见的特殊动画效果。 假设我…

【1个月速成Java】基于Android平台开发个人记账app学习日记——第4天,注册登录逻辑代码

24.11.03 1.输入手机号跳转功能 第一个要设计的功能是&#xff0c;输入手机号以后跳转到另一个页面&#xff0c;输入获取得到的验证码页面。先拿这个功能练练手。 首先看一下此时的完整项目结构&#xff1a; 主要是添加了2个活动类和对应的界面&#xff0c;下面看详细的代码…

ubuntu【桌面】 配置NAT模式固定IP

DHCP分配导致虚拟机IP老变&#xff0c;SSH老要重新配置&#xff0c;设成静态方便些 一、设NAT模式 1、设为NAT模式 2、看模式对应的虚拟网卡 - VMnet8 3、共享主机网卡网络到虚拟网卡 - VMnet8 二、为虚拟网卡设置静态IP 记住这个IP 三、设置ubuntu固定IP 1、关闭DHCP并…

数智驱动,纷享销客助力万东医疗实现精细化管理

数字化浪潮正在席卷整个医疗影像行业&#xff0c;数字化工具对疾病诊疗效率和诊疗质量的提升也有目共睹。北京万东医疗科技股份有限公司&#xff08;以下简称“万东医疗”&#xff0c;股票代码 600055&#xff09;成立于1955年&#xff0c;1997 年在上海证交所上市&#xff0c;…

项目模块十四:HttpRequest模块

一、项目设计思路 存储HTTP请求要素&#xff0c;提供简单接口 二、成员变量 全部公有 string _method; // 请求方法 string _path; // 资源路径 string _version; // 协议版本 string _body; // 请求正文 smatch _matches; // 资源路径正则提取 …

[HNCTF 2022 Week1]calc_jail_beginner_level3(JAIL)

开启靶场&#xff0c;打开链接&#xff0c;下载附件&#xff1a; 嗯&#xff0c;直接显示“Oh hacker!”&#xff0c;有点懵&#xff0c;先看看下载的附件&#xff08;server.py&#xff09;&#xff1a; 得到信息如下&#xff1a; 用户输入的表达式长度被限制在7个字符以内。…

最短路的求解

实验类型&#xff1a;◆验证性实验 ◇综合性实验 ◇设计性实验 实验目的&#xff1a;学会使用Matlab求解最短路。 实验内容&#xff1a;1.熟练运用Floyd算法&#xff1b;2. 熟练运用Dijkstra算法&#xff1b;3.利用Matlab编程实现最短路的计算。 例1&#xff1a;已知无向图…

目前最新最好用 NET 混淆工具 .NET Reactor V6.9.8

目前最新最好用 NET 混淆工具 .NET Reactor V6.9.8 1、.NET Reactor V6.9.8 功能简介2、官方下载 1、.NET Reactor V6.9.8 功能简介 业界领先的源代码保护 .NET Reactor通过多种方法来防止反编译&#xff0c;这些方法会将 .NET 程序集转换为任何现有工具都无法反编译的进程。…

为啥学习数据结构和算法

基础知识就像是一座大楼的地基&#xff0c;它决定了我们的技术高度。而要想快速做出点事情&#xff0c;前提条件一定是基础能力过硬&#xff0c;“内功”要到位。 想要通关大厂面试&#xff0c;千万别让数据结构和算法拖了后腿 我们学任何知识都是为了“用”的&#xff0c;是为…