资讯专栏INFORMATION COLUMN

前端实例练习 - 轮播图

wall2flower / 1454人阅读

摘要:轮播图代码储存在效果预览初衷很多人在初学前端的时候都会问,如何入门前端同为在前端学习道路上,奋力追赶的一员,本人对于目前网络上所能看到的入门级的教材并不太满意。在这里本人整理了目前页面上常见功能实现的具体实例。

轮播图

代码储存在Github
效果预览

</>复制代码

  1. 初衷:很多人在初学前端的时候都会问,“如何入门前端?”
    同为在前端学习道路上,奋力追赶的一员,本人对于目前网络上所能看到的 “入门级” 的教材并不太满意。学习一门新知识,实例是尤其重要的。在这里本人整理了目前页面上常见功能实现的具体实例。愿能为大家提供一些帮助。
    希望能够与大家互相分享,共同进步。

效果预览

HTML部分

创建轮播图容器

</>复制代码

添加多个轮播页面

</>复制代码

未来用来显示轮播页所在页码位置

为轮播页面加上轮播图片

添加 [前翻] [后翻] 按钮

</>复制代码

在轮播容器里面,我们在轮播页面之后再为容器加上“前翻” 和 “后翻” 按钮。
通过这两个按键我们可以控制轮播页面向前翻,或者向后翻。
此处在标签里面是 UTF-8 字符,我们可以用这些字符来表示很多特殊符号。

延展阅读: UTF-8 符号

添加圆点坐标按钮组

</>复制代码

继续在之前的代码后面,为轮播容器加上圆点坐标按钮组(也就是轮播图最下面的小圆点点),通过这些按钮我们可以清楚的看到每张轮播图片所在图片组的位置,并且可以通过点击按钮,来快速切换到我们想要的位置。

到这里我们的HTML代码就写完了,大家现在可以在浏览器里预览一下。

怎么样?很不像话吧。

接下来,就让我们开始用CSS来进一步完善它吧!

CSS 部分

重置CSS

</>复制代码

  1. * {
  2. margin: 0;
  3. padding: 0;
  4. box-sizing: border-box;
  5. }

margin, padding 默认为0,将padding和border算入宽度

延展阅读:box-sizing 属性

为轮播容器设置样式

</>复制代码

  1. /* 轮播图容器 */
  2. .slideshow-container {
  3. max-width: 800px;
  4. position: relative; /*设置为相对定位,以让子元素相对它进行绝对定位*/
  5. margin: 0 auto; /*居中*/
  6. }

为轮播页面设置样式

</>复制代码

  1. .slide {
  2. display: none; /*默认为不显示*/
  3. }
  4. .slide img {
  5. width: 100%; /*宽度最大不超过父元素(轮播容器)*/
  6. }
  7. .slideIndex { /*设置页标样式*/
  8. color: #f2f2f2;
  9. font-size: 12px;
  10. padding: 8px 12px;
  11. position: absolute;
  12. top: 0;
  13. }

为"前翻","后翻" 按钮设置样式

</>复制代码

  1. /* 前进 & 后退 */
  2. .prev, .next {
  3. cursor: pointer;
  4. position: absolute; /*在轮播容器内绝对定位*/
  5. top: 50%; /*在垂直方向调到中间*/
  6. margin-top: -22px;
  7. padding: 16px;
  8. color: white;
  9. font-weight: bold;
  10. font-size: 18px;
  11. transition: 0.6s ease; /*加入动画特效*/
  12. }
  13. .prev {
  14. left: 0;
  15. border-radius: 0 3px 3px 0;
  16. }
  17. .next {
  18. right: 0;
  19. border-radius: 3px 0 0 3px;
  20. }
  21. /*当鼠标Hover时,背景色改变,提升用户体验*/
  22. .prev:hover, .next:hover {
  23. background-color: rgba(0,0,0,0.8);
  24. }

为按钮组添加样式

</>复制代码

  1. .dotGroup {
  2. text-align: center; /*使按钮组居中*/
  3. position: relative; /*使其脱离文档流,不会被图片挡住*/
  4. margin-top: -30px; /*向上移,使其出现在在图片底端位置*/
  5. }
  6. .dot {
  7. cursor:pointer;
  8. height: 13px;
  9. width: 13px;
  10. margin: 0 2px;
  11. background-color: #bbb;
  12. border-radius: 50%;
  13. display: inline-block;
  14. transition: background-color 0.6s ease;
  15. }
  16. .active, .dot:hover {
  17. background-color: #717171;
  18. }

现在在浏览器里打开再看一下。

是不是什么也看不到?

没关系,我们马上就要见证奇迹啦,接下来让我完成最后的部分吧!

Javascript 部分

离开全局

</>复制代码

  1. (function() {
  2. })();

把JS代码放到一个多带带的自调用匿名函数中。

扩展阅读:[深入理解(function() {
})();](http://www.jb51.net/article/5...

创建轮播对象

</>复制代码

  1. var slideshow = {}; /*创建轮播对象*/
  2. slideshow.slides = document.getElementsByClassName("slide"); /*操作DOM获得轮播页面组*/
  3. slideshow.dots = document.getElementsByClassName("dot"); /*操作DOM获得圆点按钮组*/
  4. slideshow.prevBtn = document.getElementById("slideShowPrev"); /*操作DOM获得前翻页按钮*/
  5. slideshow.nextBtn = document.getElementById("slideShowNext"); /*操作DOM获得后翻页按钮*/

显示目标页面

</>复制代码

  1. /*显示指定轮播页面*/
  2. slideshow.showSlide = function(num) { /*num 目标页面在页面组中的位置*/
  3. var index,
  4. slides = this.slides,
  5. dots = this.dots,
  6. slidesLength = slides.length,
  7. dotsLength = dots.length;
  8. /*num值在范围内轮环,以此来实现轮播*/
  9. if(num > slidesLength) { /*当超过最大值,num返回第一个*/
  10. num = 1;
  11. } else if(num < 1) {
  12. num = slidesLength; /*当超出最小值,num提升至第一个*/
  13. }
  14. /*关闭全部轮播页面显示*/
  15. for(index = 0; index < slidesLength; index++) {
  16. slides[index].style.display = "none";
  17. }
  18. /*清除所有圆点按钮的 ".active" */
  19. for(index = 0; index < dotsLength; index++) {
  20. dots[index].classList.remove("active");
  21. }
  22. /*使目标页面显示,相对应圆点按钮添加 ".active" */
  23. /*因为数组从0开始,所以此处 num-1 代表相对应的index*/
  24. slides[num - 1].style.display = "block";
  25. dots[num - 1].classList.add("active");
  26. }

为前翻,后翻按钮添加功能

</>复制代码

  1. /*通过前翻,后翻按钮切换页面
  2. (num = 1:前翻)(num = -1:后翻)*/
  3. slideshow.changeSlide = function(num) {
  4. var index,
  5. currentSlideIndex,
  6. slides = this.slides,
  7. slidesLength = slides.length;
  8. for(index = 0; index < slides.length; index++) {
  9. if(slides[index].style.display == "block") { /*检测到正在显示的页面的index*/
  10. currentSlideIndex = index + 1; /*因为下标从0开始,所有此处 + 1*/
  11. break; /*此时 currentSlideIndex 为函数调用时,轮播图正在显示的页面的index*/
  12. }
  13. }
  14. this.showSlide(currentSlideIndex += num); /*与num值相加,作为参数调用 showSlide()*/
  15. }

自动轮播

</>复制代码

  1. /*自动轮播功能*/
  2. slideshow.automaticShow = function() {
  3. var index,
  4. currentSlideIndex,
  5. slides = this.slides,
  6. slidesLength = slides.length,
  7. that = this;
  8. /*循环执行代码,每隔三秒切换至下一张页面*/
  9. var autoLoop = setInterval(function() {
  10. for(index = 0; index < slidesLength; index++) {
  11. if(slides[index].style.display == "block") { /*获得正在显示的页面的index*/
  12. currentSlideIndex = index + 1;
  13. break;
  14. }
  15. }
  16. that.showSlide(currentSlideIndex + 1);
  17. }, 3000);
  18. }

添加事件监听

</>复制代码

  1. /*添加事件监听*/
  2. slideshow.addHandler = function() {
  3. var index,
  4. prevBtn = this.prevBtn,
  5. nextBtn = this.nextBtn,
  6. dots = this.dots,
  7. dotsLength = dots.length,
  8. that = this; /*此处that为slideshow对象*/
  9. prevBtn.addEventListener("click", function() {
  10. that.changeSlide(-1); /*作用域改变,this不再指slideshow对象*/
  11. }, false);
  12. nextBtn.addEventListener("click", function() {
  13. that.changeSlide(1);
  14. }, false);
  15. /*点击圆点按钮,切换至对应页面*/
  16. for(index = 0; index < dotsLength; index++) {
  17. (function(index) { /*闭包*/
  18. dots[index].addEventListener("click", function() {
  19. that.showSlide(index + 1); /*index从0开始,所以 + 1*/
  20. }, false);
  21. })(index);
  22. }
  23. }

扩展阅读: 浅谈JavaScript for循环 闭包

初始化

</>复制代码

  1. /*初始化*/
  2. slideshow.init = function() {
  3. this.showSlide(1); /*初始默认页面*/
  4. this.automaticShow();
  5. this.addHandler();
  6. }

调用

</>复制代码

  1. slideshow.init();

好啦,现在所有的代码都写完啦!

赶快打开浏览器,看看效果吧!

</>复制代码

  1. 在这里,只是给大家提供一种思路,参考。
    具体的实现,每个人都可以有不同的方法。
    请大家赶快发挥想象,把你最想实现的功能,在电脑敲出来吧!

参考自w3cschools

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/86923.html

相关文章

  • 【连载】前端个人文章整理-从基础到入门

    摘要:个人前端文章整理从最开始萌生写文章的想法,到着手开始写,再到现在已经一年的时间了,由于工作比较忙,更新缓慢,后面还是会继更新,现将已经写好的文章整理一个目录,方便更多的小伙伴去学习。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 个人前端文章整理 从最开始萌生写文章的想法,到着手...

    madthumb 评论0 收藏0
  • task0002(四)- 练习:数据处理、轮播及交互

    摘要:获取下一个元素节点,存在的话,取消现有选中状态,设置下一个元素节点为选择中,调用运动框架实现动画,添加定时器,调用该函数,实现自动播放。移出时,开启定时器,继续轮播。轮播间隔时间单位为毫秒,默认为,在内部,以下部分进行修改或添加。 转载自我的个人博客 欢迎大家批评指正 包括5部分: 小练习1-处理用户输入 小练习2-日期对象的使用 小练习3:轮播图 小练习4:输入提示框 小练习...

    cnTomato 评论0 收藏0
  • task0002(四)- 练习:数据处理、轮播及交互

    摘要:获取下一个元素节点,存在的话,取消现有选中状态,设置下一个元素节点为选择中,调用运动框架实现动画,添加定时器,调用该函数,实现自动播放。移出时,开启定时器,继续轮播。轮播间隔时间单位为毫秒,默认为,在内部,以下部分进行修改或添加。 转载自我的个人博客 欢迎大家批评指正 包括5部分: 小练习1-处理用户输入 小练习2-日期对象的使用 小练习3:轮播图 小练习4:输入提示框 小练习...

    赵春朋 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<