html+css+js 实现图片轮播效果

html+css+js 实现图片轮播效果

图片轮播效果:

  • 会自动 向左 || 向右 切换图片
  • 能手动点击按钮切换图片
  • 多用于商品展览等等
    html+css+js 实现图片轮播效果_第1张图片
    ——首先我们创建一个盒子进行展览,然后一个< ul>,< li>来存每张图片。
    话不多说,放 代码:
    HTML
<div id="banner">
			<ul id="ul">
				<li><a href="###"><img src="./images/dianyuan.jpg" />a>li>
				<li><a href="###"><img src="./images/shouhuan.jpg" />a>li>
				<li><a href="###"><img src="./images/mi4.jpg" />a>li>
			ul>
			<span id="left" onclick="left()">< span>
			<span id="right" onclick="right()">>span>
			<ol id="ol">
				
			ol>
		div>

CSS
这里css的设置不算重要,大家根据我的注释看一下

#banner {
	height: 75%;
	width: 100%;
	overflow: hidden;
	position: relative;
}

#banner #ul {
	width: 6600px;		/*ul的宽度我们选择业让那个js动态生成,这样可以减少后期修改带来的麻烦*/
	height: 100%;
	position: absolute;
	left: -0350px;				/*因为我的图片比较大,所以为了能让内容居中,于是移了一些出去*/
	top: 0;
}

#banner li {
	float: left;			/*浮动,使所有图片排成一行*/
	width: 2200px;			/*设置每个li的宽度(根据自己的图片width进行选择)*/
	height: 100%;
}

#banner img {
	width: 100%;
	position: relative;
}
#banner #left , #banner #right{		/*两边的left、right按钮(<  >)*/
	width: 40px;
	height: 40px;
	position: absolute;
	left: 5px;
	top: 50%;
	margin-top: -20px;
	background-color: cadetblue;
	cursor: pointer;
	line-height: 40px;
	text-align: center;
	font-weight: bold;
	font-family: '黑体';
	font-size: 30px;
	color: #000;
	opacity: 0.5;
	border: 1px solid #fff;
}
#banner #right{
	right: 5px;
	left: auto;
}
#banner #left:hover , #banner #right:hover{
	opacity: 1;
	border-color: #000;
	color: #fff;
}
#banner #ol{				/*底部的图片精准选择按钮*/
	position: absolute;
	bottom: 10px;
	left: 50%;
}
#banner #ol li{
	border-radius: 45px;			/*令其呈圆形*/
	width: 15px;
	height: 15px;
	background-color: #CCCCCC;
	cursor: pointer;			/*鼠标呈 手 样式*/
	line-height: 20px;
	text-align: center;
	font-weight: bold;
	font-family: '黑体';
	font-size: 15px;
	color: #000;
	opacity: 0.5;				/*设置透明度*/
	border: 2px solid #333;
	float: left;
	margin: 0 10px;
}
#banner #ol li:hover{
	opacity: 0.8;
}
#banner #ol .now{				/*当前展示图片所对应的数字按钮(这个.now我们由js动态设置)*/
	opacity: 1;					/*不透明*/
	background-color: #333;
}

js部分 重头来啦~~~~~~~~~~~~~~~~~~~~

首先我们先进行对象成员的赋值

  • obj.offsetLeft:获取对象的left属性值(只读)
  • obj.offsetWidth:获取对象的width属性值(只读)
var ul = document.getElementById("ul");
var ol = document.getElementById("ol");
var li = ul.getElementsByTagName("li");
var li_width = li[0].offsetWidth;				//获得li的宽度
var left_start = ul.offsetLeft;			//获取当前第一张图片的left
ul.style.width=(li_width*li.length)+"px";

然后是对< ol> < li>的初始化创建

  • var one=setInterval(“right()”,3000)

    • setInterval() :方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。
    • 返回一个可以传递给 Window.clearInterval() 从而取消对 code 的周期性执行的值。
    • 我们让它每过3秒就调用一次right()向右滑动
  • 我们在click的点击中先清除掉setInterval,再创建setInterval,这样可以让用户在选择是有足够的时间观看

var one=setInterval("right()",3000);			//setInterval() :方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。

for(var i=0 ; i<li.length ; i++){				//动态生成底部按钮数字按钮
	var ol_li=document.createElement("li");		//创建
  • 标签 ol.appendChild(ol_li); //加入将ol_li加入到
      标签中 ol_li.id=i+1; //设置id,主要是方便后面的数字计算 ol_li.onclick=function(){ clearInterval(one); pic=this.id; ul.style.left = (left_start - (pic-1) * li_width) + "px"; //点击那个li就会跳转到那张图片 change(); //见下文 one=setInterval(right,3000); //前面取消了周期时间one,现在又把它开启,后面也会有这种操作,主要是为了使用方便 } }
  • 这里我们设置了一下逻辑功能,以及change()方法

    • pic:这里用来关联当前所展示的图片
    • obj.className:设置标签的class名称,设置完毕后会被css所更改相应样式
    var pic=1;
    var last=document.getElementById(pic);	//定义last变量指向一个li标签
    last.className="now";  //在css中我已经将class为now的样式设置为特殊设置,是为了突出
    
    function change(){				//“改变”方法:动态设置当前显示的图片所对应按钮的格式
    	last.className=" ";			//清除上一个的格式
    	document.getElementById(pic).className="now";	//为当前li添加className(需要css配合使用.now{设置格式})
    	last=document.getElementById(pic);		//更新last
    }
    

    接下来就是最重要的部分了left()与right()

    • 这里我自认为注释已经写得很全了,哈哈哈哈,若有那里不清楚的欢迎评论
    • 这里主要就是一些逻辑的部分,利用几个属性来回改变< ull>的left
      • left值越少,就越到后面的图片
    ul.style.transition="left 0.5s, right 0.5s";	//为图片轮播效果加一个transition过渡动画,当然是为了更好看啦
    
    function left() {			//向左按钮
    	clearInterval(one);							//先暂停
    	/*if (ul.offsetLeft > left_start - li_width) {	//考虑到当前图片已经是第一张,点击left按钮就跳向最后一张 */ 
    	// 这种方法出了Bug
    	if(pic == 1){
    		ul.style.left = (left_start - (li.length - 1) * li_width) + "px";
    		pic=li.length;			//li.length就相当于是最后一张图片的id了(见前面这只id部分)
    	} else {
    		ul.style.left = (ul.offsetLeft + li_width) + "px";
    		pic--;				//向前翻一张,当然就减一了
    		// alert(ul.offsetLeft);
    	}
    	change();			//每次改变是都调用change()函数
    	one=setInterval(right,3000);				//重新开始周期调用
    }
    
    function right() {			//向右按钮
    	clearInterval(one);
    	/* if (ul.offsetLeft < left_start - (li.length - 2) * li_width) {//考虑到已经是最后一张的情况,跳向第一张 */
    	if(pic == li.length){
    		ul.style.left = (left_start) + "px";
    		pic=1;
    	} else {
    		ul.style.left = (ul.offsetLeft - li_width) + "px";
    		pic++;
    		// alert(ul.offsetLeft);
    	}
    	change();				//调用改变函数
    	one=setInterval(right,3000);
    }
    

    好了,码字不易,欢迎 点赞 评论

    在这里插入图片描述
    html+css+js 实现图片轮播效果_第2张图片

    你可能感兴趣的:(js,html,html5,css,javascript,css3)