web技术

轮播图小白教程

2023-06-30 10:26 作者:Admin

轮播图:

可以从图上,看出我们要实现的效果,首先罗列出来,方便我们一步步的进行处理。

此处我才用的是重叠图片,通过定时器,按一定时间进行对图片display属性进行更改。

实现的效果是:
1>图片自动轮播
2>图片序列按钮的点击更改图片事件
3>上、下一张的按钮事件
4>鼠标悬于图片上,不进行轮播。

当然,在这些效果之前,我们需要写完我们的html内容和css样式。

下列开始先写html。

<!--最大的div,是为了做为一个轮播图所需元素的容器-->
<div id="main">
  <!--轮播图片区   在取名时,因为各有所长(分别取名slide1-5),有共有特性(banner-slide),所以,取多个类名-->
  <div id="banner">
    <!--图1-->
    <a href="">
      <div class="banner-slide slide1">1</div>
    </a>
    <!--图2-->
    <a href="">
      <div class="banner-slide slide2">2</div>
    </a>
    <!--图3-->
    <a href="">
      <div class="banner-slide slide3">3</div>
    </a>
    <!--图4-->
    <a href="">
      <div class="banner-slide slide4">4</div>
    </a>
    <!--图5-->
    <a href="">
      <div class="banner-slide slide5">5</div>
    </a>
  </div>
  <!--
    移动数字绑定图片
    必然的是,和图片数量是对等的
  -->
  <div class="dots">
    <ul id="dots">
      <li>1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
      <li>5</li>
    </ul>
  </div>
  <!--
    上、下一张按钮
  -->
  <div id="left-right">
    <div class="move" id="prev">‹</div>
    <div class="move" id="next">›</div>
  </div>
</div>

很好,框架已经有了,开始写css吧。

/*二话不说,上来就用通配符删除浏览器默认 值*/
* {
	margin: 0;
	padding: 0;
}

#main {
	width: 1200px;
	height: 600px;
	position: relative;
	margin: 50px auto;
/*为了在此的观看效果,我选择了这个数据*/
		/*overflow: hidden;*//*因为设置了隐藏,所示的效果只有一张solid1*/
		/*可在元素赠加和定位完成后进行影藏*/
}
	/*
	 * 为所以图片设置同main一样宽高不大推荐
	 	因为,如果图片没进行过处理,强制改变宽高,容易产生变形,
	 	图片将变得难看。
	 * *//*为了使图片叠加所以我们使用absolute,在此之前
	 * 	我们需要去它的父级添加一个relative。
	 * */
#main .banner-slide {
	position: absolute;
	width: 1200px;
	height: 600px;
	overflow: hidden;
/*防止图片过大,超出范围,影响视觉*/
}
	/*
	 * 挨个设置轮播图的图片
	 * 为了方便在图片所在div加内容,标签
	 * 我们选择把轮播图内容以background形式出现。
	 */
#main .slide1 {
	background: red;
}

#main .slide2 {
	background: yellow;
}

#main .slide3 {
	background: blue;
}

#main .slide4 {
	background: green;
}

#main .slide5 {
	background: deepskyblue;
}
	/*ul标签的移动*/
#main .dots #dots {
	position: absolute;
	margin-top: 560px;
/*由于我设置了li高为40,总高600,所以进行
		560的移动*/
	margin-left: 275px;
/*(1200-5*130)/2*/
}

#main .dots #dots li {
	height: 40px;
	width: 80px;
	border-radius: 20%;
	background: gray;
/*在此的样式根据个人喜好自己添加*/
		/*由于上面的定位,所以*/
	float: left;
/*为了是图标自左向右*/
	margin-left: 50px;
	list-style: none;
}

#main #left-right .move {
	position: absolute;
	margin-top: 260px;
	height: 80px;
	width: 40px;
	font-size: 50px;
/*设置<>大小*/
	padding-left: 10px;
}
	/*左右分离*/
#main #left-right #next {
	right: 0;
}
	/*触碰上下张有效果*/
#main #left-right .move:hover {
	background: rgba(0,0,0,0.4);
}

暂时先这样,看一下效果:

是不是已经有点雏形了?但是里面还少了一些东西,我们后面慢慢加,接下来开始我们的js部分

//因为之前使用了很多的id,所以我们为了方便得到
//所需的document.getElementById();,做一个封装函数(我是网上看来觉得挺好的)
function byid(id) {
  return typeof id === "string" ? document.getElementById(id) : id;
  //	相当于 return if(typeof(id)==='string'){
  //		document.getElementById(id);
  //	}else{
  //		id;
  //	}
}
//接下来开始轮播图脚本了。
//为了使得函数很多变量能互相使用,所以我们需要在wai
//定义好全局变量。
//len的设定   :  由于长度上的计算很少,而且图片和数字移动数量相同,只需设置一个
// index的设定:  设置记数变量,因为数字从0开始计算。
var main = byid("main"),
  pics = byid("banner").getElementsByTagName("div"),
  dots = byid("dots").getElementsByTagName("li"),
  prev = byid("prev"),
  next = byid("next"),
  len = pics.length,
  index = 0,
  timer = null; //timer是为了进行定时器的设置挺与开
//轮播图整体函数
function solide() {
  //轮播定时器(是整个容器即main):移入鼠标停止,和移出继续轮播
  //先来个划入清除定时器
  banner.onmouseover = function () {};
  //再写一个划出继续启动定时器
  banner.onmouseout = function () {};
}
solide(); //提前写上,开始方法,才有轮播效果

接着为了方便我们接下来的js操作,进行下css和html的补充。如图

来,我们看下补充的js代码(为了好区分)我使用了图片:

接着

最后!

下面送上完整代码(分块)

html

<!--最大的div,是为了做为一个轮播图所需元素的容器-->
<div id="main">
  <!--轮播图片区   在取名时,因为各有所长(分别取名slide1-5),有共有特性(banner-slide),所以,取多个类名-->
  <div id="banner">
    <!--图1-->
    <a href="">
      <div class="banner-slide slide1 slide-active">1</div>
    </a>
    <!--图2-->
    <a href="">
      <div class="banner-slide slide2">2</div>
    </a>
    <!--图3-->
    <a href="">
      <div class="banner-slide slide3">3</div>
    </a>
    <!--图4-->
    <a href="">
      <div class="banner-slide slide4">4</div>
    </a>
    <!--图5-->
    <a href="">
      <div class="banner-slide slide5">5</div>
    </a>
  </div>
  <!--
    移动数字绑定图片
    必然的是,和图片数量是对等的
  -->
  <div class="dots">
    <ul id="dots">
      <li class="li1">1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
      <li>5</li>
    </ul>
  </div>
  <!--
    上、下一张按钮
  -->
  <div id="left-right">
    <div class="move" id="prev">‹</div>
    <div class="move" id="next">›</div>
  </div>
</div>

css

/*二话不说,上来就用通配符删除浏览器默认 值*/
* {
	margin: 0;
	padding: 0;
}

#main {
	width: 1200px;
	height: 600px;
	position: relative;
	margin: 50px auto;
/*为了在此的观看效果,我选择了这个数据*/
	overflow: hidden;
/*因为设置了隐藏,所示的效果只有一张solid1*/
		/*可在元素赠加和定位完成后进行影藏*/
}
	/*
	 * 为所以图片设置同main一样宽高不大推荐
	 	因为,如果图片没进行过处理,强制改变宽高,容易产生变形,
	 	图片将变得难看。
	 * *//*为了使图片叠加所以我们使用absolute,在此之前
	 * 	我们需要去它的父级添加一个relative。
	 * */
#main .banner-slide {
	position: absolute;
	width: 1200px;
	height: 600px;
	overflow: hidden;
/*防止图片过大,超出范围,影响视觉*/
	display: none;
}

#main .slide-active {
	display: block;
}
	/*
	 * 挨个设置轮播图的图片
	 * 为了方便在图片所在div加内容,标签
	 * 我们选择把轮播图内容以background形式出现。
	 */
#main .slide1 {
	background: red;
}

#main .slide2 {
	background: yellow;
}

#main .slide3 {
	background: blue;
}

#main .slide4 {
	background: green;
}

#main .slide5 {
	background: deepskyblue;
}
	/*ul标签的移动*/
#main .dots #dots {
	position: absolute;
	margin-top: 560px;
/*由于我设置了li高为40,总高600,所以进行
		560的移动*/
	margin-left: 275px;
/*(1200-5*130)/2*/
}

#main .dots #dots li {
	height: 40px;
	width: 80px;
	border-radius: 20%;
	background: gray;
/*在此的样式根据个人喜好自己添加*/
		/*由于上面的定位,所以*/
	float: left;
/*为了是图标自左向右*/
	margin-left: 50px;
	list-style: none;
}

#main .dots #dots .li1 {
	background: blue;
}

#main #left-right .move {
	position: absolute;
	margin-top: 260px;
	height: 80px;
	width: 40px;
	font-size: 50px;
/*设置<>大小*/
	padding-left: 10px;
}
	/*左右分离*/
#main #left-right #next {
	right: 0;
}
	/*触碰上下张有效果*/
#main #left-right .move:hover {
	background: rgba(0,0,0,0.4);
}

js

//因为之前使用了很多的id,所以我们为了方便得到
//所需的document.getElementById();,做一个封装函数(我是网上看来觉得挺好的)
function byid(id) {
  return typeof id === "string" ? document.getElementById(id) : id;
  //	相当于 return if(typeof(id)==='string'){
  //		document.getElementById(id);
  //	}else{
  //		id;
  //	}
}
//接下来开始轮播图脚本了。
//为了使得函数很多变量能互相使用,所以我们需要在wai
//定义好全局变量。
//len的设定   :  由于长度上的计算很少,而且图片和数字移动数量相同,只需设置一个
// index的设定:  设置记数变量,因为数字从0开始计算。
var main = byid("main"),
  pics = byid("banner").getElementsByTagName("div"),
  dots = byid("dots").getElementsByTagName("li"),
  prev = byid("prev"),
  next = byid("next"),
  len = pics.length,
  index = 0,
  timer = null; //timer是为了进行定时器的设置挺与开
//定时器的关注
function solide() {
  //轮播定时器(是整个容器即main):移入鼠标停止,和移出继续轮播
  //先来个划入清除定时器
  banner.onmouseover = function () {
    if (timer) {
      //即timer不为null,为真
      clearInterval(timer); //清除setinterval,并且此时timer又为false,不过,随着循环(即师表
      //移开banner,循环继续又变回 setinterval。
    }
  };
  //再写一个划出继续启动定时器
  banner.onmouseout = function () {
    timer = setInterval(function () {
      index++;
      if (index >= len) {
        index = 0;
      } //注意因为index表示的是图片的标号,最大为4!!
      //有了index就可以进行轮播了,可是我们没有执行图片变化的番薯
      //设置一个,在全局作用域中。
      changImg();
    }, 3000); //setInterval为延时不停息的执行
  };
  banner.onmouseout(); //这样子直接运行function,可以不用在鼠标移出才进行,进入页面同时就开始轮播
  //接下来我们开始数字下标绑定图片移动;
  for (var j = 0; j < len; j++) {
    //在开始前,我们需要知道,函数是可以独立作用域之外的。
    dots[j].index = j; //为所以dots属性添加id,分别为0,1,2,3,4。
    //不太推荐使用这样,毕竟id名字取数字开头不好,不太合规矩。
    dots[j].onclick = function () {
      index = this.index; //(引用id的是dots,及dots的id);
      changImg();
    };
  }
  //然后是上、下一张
  prev.onclick = function () {
    index--;
    if (index < 0) {
      index = len - 1;
    }
    changImg();
  };
  next.onclick = function () {
    index++;
    if (index >= len) {
      index = 0;
    }
    changImg();
  };
}
solide(); //提前写上,开始方法,才有轮播效果
//图片自动切换
function changImg() {
  for (var i = 0; i < len; i++) {
    pics[i].style.display = "none";
    dots[i].className = "";
  }
  pics[index].style.display = "block";
  dots[index].className = "li1";
}
标签: #轮播图 #JavaScript
推荐文章
HTML5 Canvas是一种强大的Web技术,它允许我们使用JavaScript在网页上创建和...
在这个程序中,我们将使用JavaScript创建一个可以在屏幕上放烟花的效果。我...
轮播图在网站中几乎无处不在,占用地方少,交互性好。今天就来聊聊如何用vu...
大部分网站或APP的首页差不多都运用到了轮播图,下边就探讨一下关于轮播图的...
轮播图实现思路:1、img_ul类里面存放img标签,将需要展示的图片依次排开,在...
推荐专题
如何自己建网站?建网站难不难?其实建网站说难不难,说容易也并不容易,难...
本专题精心收集整理了多种HTML+CSS+JS轮播图实现方案,带详细代码和讲解,正...