用原生JS 写Web首页轮播图

目前自己在学习JS中,用目前学到的东西写了一个轮播图,能完整的实现轮播图的功能,但是肯定还是有不完善的地方,也希望大家能留言交流,一起学习。

一、思路

首先将功能一个一个理顺,主要功能分为三大块:

(一)点击左右按钮,实现更换图片并循环。

(二)图片自动定时切换,当鼠标在图片上时暂停切换,移出时恢复。

(三)轮播图上导航点变换与点击切换

二、实现

HTML和CSS的代码如下:

<!doctype html>
<head>
	<title>轮播图</title>
	<meta charset="utf-8">
	<style>
		*{
			padding:0;
			margin:0;
			box-sizing: content-box;
			text-decoration: none;
		}

		#container {
			width:600px;
			height:300px;
			border:1px red solid;
			overflow: hidden;
			position: relative;
		}

		#list {
			position: absolute;
			z-index: 1;
			width: 3000px;
		}

		#list img {
			width: 600px;
			height: 300px;
			padding: 0;
			margin: 0;
		}

		#prev {
			position: absolute;
			top: 40%;
			left: 0;
			height:70px;
			width: 30px;
			z-index: 2;
		}

		#next {
			position: absolute;
			top: 40%;
			right: 0;
			height:70px;
			width: 30px;
			z-index: 2;
		}

		#list-buttons {
			position: absolute;
			bottom: 5%;
			z-index: 2;
			width:600px;
			text-align: center;
		}

		#list-buttons span{
			display: inline-block;
			width: 10px;
			height: 10px;
			background-color: #ffffff;
			border-radius: 100%;
		}

        #list-buttons .on{
            background-color: #b2b2b2;
        }
	</style>
</head>
<body>
	<div id="container">
		<div id="list" style="left: 0px;"> <!-- 0px为初始位置 -->
			<img src="img-01.jpg" alt="1">
			<img src="img-02.jpg" alt="1">
			<img src="img-03.jpg" alt="1">
		</div>
		<div id="list-buttons">
			<span class="on"></span>
			<span></span>
			<span></span>
		</div>
		<div>
			<button id="prev" class="button" type="button"><</button>
			<button id="next" class="button" type="button">></button>
		</div>
	</div>
<body>

  

(一)左右按钮切换图片

首先取得操作切换图片的元素:

var prev = document.getElementById(‘prev‘);
var next = document.getElementById(‘next‘);

然后我用三张图片组成了一串图片条,以图片条的左边缘作为图片的起始位置,通过不断修改图片的起始位置,从而让图片显示在可显示的区域里。

这里写了两个函数,分别对应左右的切换按钮。

这里图片的宽段是600px,要点击next按钮让图片切换下一张,那就得在让图片条向左移动600px。为了让切换的图片能够循环,当到达最后一张图片的位置时,再点击下一张按钮,就会重置到第一张图片,以此循环。

    var initial = parseInt(list.style.left); //listImage的初始数值

    function nextMove(){
        initial -= 600; //图片向左滑动
          if(initial < -1200){
              initial = 0;
          }
        list.style.left = initial + ‘px‘;
        //调用dot函数,判断当前点的位置
        dot();
      }

      function prevMove(){
        initial += 600; //图片向右滑动
          if(initial > 0){
              initial = -1200;
          }
        list.style.left = initial + ‘px‘;
      }

(二)图片自动定时切换与当鼠标在图片上时暂停切换,移出时恢复

要实现定时自动播放,那就得用window.setInterval()方法,在指定的时间间隔调用函数,同时将它返回的值赋给变量time,这里就实现了自动切换。

var time = window.setInterval(nextMove, 2000);

.setInterval()方法还有一个对应的clearInterval()方法,用来取消调用函数。所以我就写了一个函数,来判断鼠标的状态是移进还是移出,并给图片区域绑定了事件处理程序,这样当鼠标移进就会暂停,移出继续。

     var container = document.getElementById(‘container‘);

    container.addEventListener(‘mouseenter‘, state, false);
      container.addEventListener(‘mouseleave‘, state, false);

      function state(eventName){
        switch(eventName.type){
          case ‘mouseenter‘:
            window.clearInterval(time);
            break;

          case ‘mouseleave‘:
            time = window.setInterval(nextMove, 2000);
            break;
        }
      }

(三)轮播图上导航点变换与点击切换

首先要实现点跟着图片进行变换,所以声明一个函数,判断当前图片条的位置,来对应设置相应位置的导航点样式,并取消其他导航点的样式。

   var listBtn = document.getElementsByTagName(‘span‘);

   function dot(){
        switch(initial){
          case 0:
            console.log(‘0px‘);
            listBtn[0].className = ‘on‘;
            listBtn[1].className = ‘‘;
            listBtn[2].className = ‘‘;
            break;

          case -600:
            console.log(‘-600px‘);
            listBtn[0].className = ‘‘;
            listBtn[1].className = ‘on‘;
            listBtn[2].className = ‘‘;
            break;

          case -1200:
            console.log(‘-1200px‘);
            listBtn[0].className = ‘‘;
            listBtn[1].className = ‘‘;
            listBtn[2].className = ‘on‘;
            break;
        }
      }

最后就是当点击相应的导航点时,跳转到对应的图片上了。为此,我给每个导航点添加了一个索引属性,再通过判断点击的是第几个导航点,切换到对应的图片位置就可以了。

for(let i = 0; i < listBtn.length; i++){
        listBtn[i].index = i;
        listBtn[i].addEventListener(‘click‘, function(){
          switch(listBtn[i].index){
            case 0:
              initial = 0;
              dot();
              list.style.left = ‘0px‘;
              break;

            case 1:
              initial = -600;
              dot();
              list.style.left = ‘-600px‘;
              break;

            case 2:
              initial = -1200;
              dot();
              list.style.left = ‘-1200px‘;
              break;
          }
        }, false);
      }

以上就是整个轮播图的实现过程。

2018-07-20

原文地址:https://www.cnblogs.com/pine-cone/p/9343724.html

时间: 2024-11-09 18:38:36

用原生JS 写Web首页轮播图的相关文章

第一阶段:前端开发_使用JS完成首页轮播图效果

2018-06-04 使用JS完成首页轮播图效果 一.技术分析 获取元素: document.getElementById("id 名称") 事件(onload) :页面加载事件 定时操作:setInterval("changeImg()",3000); 二.步骤分析 第一步:确定事件(onload)并为其绑定一个函数    第二步:书写绑定的这个函数    第三步:书写定时任务(setInterval)    第四步:书写定时任务里面的函数    第五步:通过变量

原生JS面向对象思想封装轮播图组件

原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能实现都分别分为不同的模块.目前我封装的这个版本还不适配移动端,只适配PC端. 主要的功能有:自动轮播,点击某一张图片对应的小圆点就跳转到指定图片,有前后切换按钮.使用的时候只需要传入图片的路径以及每张图片分别所对应的跳转路径还有目标盒子ID就可以了,还可以自定义每张图轮播的延时,不过延时参数不是必须

用jQuery实现优酷首页轮播图

▓▓▓▓▓▓ 大致介绍 看到了一个轮播图的思路,就想的自己动手实践一下,总体来说用jQuery实现起来简单多了 如果对代码中使用的方法有疑问,可以参考我的jQuery学习之路(持续更新),里面有讲解:或者你和我一样学习jQuery不久,那你可以看看我的jQuery小案例(持续更新),互相学习! 预览:优酷首页轮播图 ▓▓▓▓▓▓ 思路 思路其实非常简单,就是当点击图片下面的圆点或者图片两边的箭头时,让想要看到的图片走到它的位置,然后当前的图片和想要看到的图片按照一个方向运动就可以了 例如:我们点

关于用jQuery知识来实现优酷首页轮播图!

▓▓▓▓▓▓ 大致介绍 看到了一个轮播图的思路,就想的自己动手实践一下,总体来说用jQuery实现起来简单多了 如果对代码中使用的方法有疑问,可以参考我的jQuery学习之路(持续更新),里面有讲解:或者你和我一样学习jQuery不久,那你可以看看我的jQuery小案例(持续更新),互相学习! 预览:优酷首页轮播图 ▓▓▓▓▓▓ 思路 思路其实非常简单,就是当点击图片下面的圆点或者图片两边的箭头时,让想要看到的图片走到它的位置,然后当前的图片和想要看到的图片按照一个方向运动就可以了 例如:我们点

移动端原生js,css3实现轮播图

一.功能需求 1.自动播放2.滑动切换3.点击切换 二.思路分析 html代码: <div class="container"> <ul class="list clearfix"> <li class="item fl item5">图5</li> <li class="item fl item1">图1</li> <li class="

angularjs实现首页轮播图

<!DOCTYPE html> <html ng-app="myApp" lang="en"> <head> <meta charset="UTF-8"> <title>AngularJS carousel</title> <link href="http://libs.baidu.com/bootstrap/3.3.0/css/bootstrap.min.c

js写的简单轮播图

这个轮播图代码是从网上找来的,专门找了个写法简单的,只是作为一个小练习,大概原理如下: 1.首先是图片切换2.自动播放3.调用自动播放4.移动到容器上边停止播放,离开自动播放5.移动到导航上停止播放,离开自动播放6.移动到导航上,切换相对应的导航 然后贴代码: <!doctype html><html lang="en"><head> <meta charset="UTF-8"> <title>Docume

Flask实战第48天:首页轮播图实现

首页的布局如下 因为以后所有的内容都是在main-container里面,所以这里我们修改front_base.html,把{% block body%}{% endblock%}放到里面去 <div class="main-container"> {% block body %}{% endblock %} </div> 创建static/front/css/front_base.css, 并且在front_base.html中引入它 .main-contai

阶段一-02.分类,推荐,搜索,评价,购物车开发-第1章 首页轮播图+分类功能实现-1-1 实现电商首页轮播图功能

绿色的部分 背景色和当前的图片是对应的 Mysql内,数据表已经包含了一些数据. 编写代码service层 定义为一个接口, 实现类 实现接口类,并加上注解@Service controller 参数为了更通用化,一般会使用枚举.复制Sex复制为YesOrNo的枚举类. 写死的数据尽量要做到通用化. 查询方法的参数 使用枚举 加上seagger的注释. 测试 全局安装.maven install 启动API.刷新页面轮播图就出来了. 前端代码逻辑 前端通过jquery去渲染 结束 原文地址:ht