首页 > 其他分享 >2019-8-29-02-JS-DOM

2019-8-29-02-JS-DOM

时间:2024-11-30 20:10:42浏览次数:6  
标签:02 点选 轮播 DOM 一页 slide 2019 按钮 left

图片轮播是Web开发中最常见的组件之一,这是一篇用原生JavaScript实现简单图片轮播的教程。

要实现图片轮播,首先我们要将图片轮播拆分为图片容器、图片、上一页按钮、下一页按钮、底部点选容器、底部点选按钮。

下面我们用HTML代码表示。

...
<div id="page">
   <div id="ContainerWrap">
         <div class="pre"><</div> 
         <div id="picContainer">
            <img src="https://via.placeholder.com/500x250?text=1" alt="1">
            <img src="https://via.placeholder.com/500x250/000000?text=2" alt="2">
            <img src="https://via.placeholder.com/500x250/66ccff?text=3" alt="3">
            <img src="https://via.placeholder.com/500x250/000000?text=4" alt="4">
            <img src="https://via.placeholder.com/500x250/66ccff?text=5" alt="5">
         </div>
         <div id="dotContainer">
            <div class="dot active"></div>
            <div class="dot"></div>
            <div class="dot"></div>
            <div class="dot"></div>
            <div class="dot"></div>
         </div>
         <div class="next">></div>
   </div>
</div>
...

并为它添上样式。

* {
   margin: 0;
   padding: 0;
}
body {
   text-align: center;
}
#page{
   position: absolute;
   top: 50%;
   left: 50%;
   transform: translate(-50%, -50%);
}
#ContainerWrap {
   width: 500px;
   overflow: hidden;
   margin: 0 auto;
}
#picContainer {
   height: 250px;
   width: 5000px;
   border-radius: 5px;
}
#picContainer img {
   border-radius: 5px;
   float: left;
   transition-property: position;
   transition-duration: 1s;
}
.pre,.next {
   position: absolute !important;
   height: 60px;
   width: 30px;
   background: rgba(0, 0, 0, 0.5);
   position: relative;
   color: white;
   line-height: 60px;
   text-align: center;
   z-index: 99999;
 
}
.pre {
   left: 0px;
   border-top-right-radius: 5px;
   border-bottom-right-radius: 5px;
   top: 100px;
}
.next {
   right: 0px;
   border-top-left-radius: 5px;
   border-bottom-left-radius: 5px;
   top: 100px;
}

#dotContainer {
   position: relative;
   top: -20px;
   left: 350px;
   z-index: 9999;
   height: 10px;
   width: 500px;
}
.dot {
   background: rgba(255, 255, 255, 0.5);
   width: 10px;
   height: 10px;
   border-radius: 10px;
   float: left;
   margin-left: 15px;
}

.dot.active {
   background: blueviolet;
}

到目前为止,我们的轮播已经初具雏形了。但要让图片轮播能够使用,我们还要使用JavaScript和DOM来控制HTML元素的显示与隐藏。

首先我们要声明一个变量作为当前轮播页码,并在点击任一切换按钮时改变它。我们可以把图片容器作为一个对象,当点击切换按钮时改变它的水平偏移量。

点选按钮在HTML代码中重复出现了五次,我们也将每一个按钮作为一个对象,并将所有点选按钮的长度(即个数)存储起来。

var currentIndex = 0;
var position = document.getElementById('picContainer');
var dot=document.querySelectorAll('.dot');
var len=dot.length;

先将点选后执行的DOM操作写作一个函数。

function slide(index){
  //移除所有选中状态
  for(var i=0;i<len;i++){
    dot[i].classList.remove("active");
  }
  //添加动态位移
  position.style.transform="translateX(-"+(index)*500+"px)";
  position.style.transitionDuration= "1s";
  //添加当前索引选中状态
  dot[index].classList.add("active");
  //改变当前索引为传入的参数
  currentIndex = index;
}

在HTML代码部分为上一页下一页添加点击事件,并为每个点选按钮添加点击事件为slide函数,并填上对应参数。

<div class="pre" onclick="prev()"><</div> 
...
<div id="dotContainer">
  <div class="dot active" onclick="slide(0)"></div>
  <div class="dot" onclick="slide(1)"></div>
  <div class="dot" onclick="slide(2)"></div>
  <div class="dot" onclick="slide(3)"></div>
  <div class="dot" onclick="slide(4)"></div>
</div>
...
<div class="pre" onclick="next()">></div> 

上一页/下一页按钮与点选按钮的原理相同,都是改变位移,因此我们只需再次调用slide函数。

function next() {
   if(currentIndex===len - 1){
      slide(0);
      return;
   }
   slide(currentIndex + 1);
}   
function prev() {
   if(currentIndex===0){
      slide(len-1);
      return;
   }
   slide(currentIndex-1);
}

当前页数索引(从0开始)是最后一个的时候,点击下一页返回到第一页,并改变索引为0,否则都切换到索引页的下一页。

当前页数索引是第一个的时候,点击上一页切换到最后一页,并改变索引为长度-1,否则都切换到索引页的上一页。

至此我们已经完全实现了一个简单的图片轮播具备的功能,感谢你的阅读。

标签:02,点选,轮播,DOM,一页,slide,2019,按钮,left
From: https://www.cnblogs.com/sherryme/p/18578809

相关文章

  • ssm基于Java的高校教学业绩信息管理系统(10279)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......
  • ssm选课排课系统的设计与开发+vue(10296)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......
  • 20222414 2024-2025-1 《网络与系统攻防技术》实验七实验报告
    1.实验内容及要求1.1本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有(1)简单应用SET工具建立冒名网站(2)ettercapDNSspoof(3)结合应用两种技术,用DNSspoof引导特定访问到冒名网站。1.2本周学习内容(1)web安全基础:学习了web前端和后端的概念......
  • The solution to NOIP2024·T1——edit
    ThesolutiontoNOIP2024·T1——edithttps://www.luogu.com.cn/problem/P11361这是我在赛场想出来的思路,平时一个绿题都写不出来的题竟然一眼出思路,也真是RP++;思路由题目中的非限制的数可以互相交换,想到对于每一段连续的非限制性的区间都可以任意排布位置。那么可以把t序......
  • 2024CCPC郑州邀请赛(组队VP)
    B.扫雷1面:T0xel喜欢玩扫雷,但是他玩的扫雷游戏有名为“地雷探测器”的特殊道具。具体来说,T0xel会进行$n$轮扫雷。每轮扫雷开始之前,T0xel会获得1枚扫雷币。扫雷币在每轮扫雷结束后不会回收,可以保留至下一轮扫雷。T0xel知道,在第$i$轮$(1\leqi\leqn)$扫雷中,......
  • 七,[SUCTF 2019]EasySQL1
    进入靶场后是如下页面先查看源代码显然没什么用根据名称知,这题一定与SQL注入有关输入111111看看回显,显示Array......输入or1=1,显示nonono,可能是关键字被过滤了,尝试抓包大概4个回显页面,而且知道了过滤了哪些关键字过滤的关键字有通过这个可以排除一些注......
  • 20222406 2024-2025-2 《网络与系统攻防技术》实验七实验报告
    202224062024-2025-2《网络与系统攻防技术》实验七实验报告1.实验内容应用SET工具,通过多步操作建立冒名网站,获取登录信息。利用ettercap实施DNSspoof攻击,篡改特定网站IP。结合两种技术,用DNSspoof引导访问至冒名网站。2.实验过程2.1简单应用SET工具建立冒名......
  • NOIP2024 游寄
    NOIP2024Day0最后抱佛脚,教练让我们看点双边双,才发现原来我只写过强连通分量的Tarjan,写了几个模板。在本校考,所以去机房试机,擦了以下设备。发现学校机房电脑居然是十代i5。内存加到16G了,应该不会再像CSP2023和CSP2024开考半小时死机了。准考证号90+,感觉1=渺茫。Day1出门忘......
  • 学期:2024-2025-1 学号:20241303 《计算机基础与程序设计》第10周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第十周作业)这个作业的目标<写上具体方面>计算机科学概论(第七版)第12,13,14章并完成云班课测试,《C语言程序设计......
  • 20222325 2024-2025-1 《网络与系统攻防技术》实验七实验报告
    1.实验内容本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有:(1)简单应用SET工具建立冒名网站;(2)ettercapDNSspoof;(3)结合应用两种技术,用DNSspoof引导特定访问到冒名网站。2.实验过程2.1简单应用SET工具建立冒名网站攻击机kali的IP地......