JS时实现图片无线轮播,支持响应式布局,动态调整坐标大小

效果图:

 

 

 

 

CSS 

@CHARSET "UTF-8";

* {
	margin: 0px;
	padding: 0px;
}

.wheel_combination{
	width: 100%;
	height: auto;
	position: relative;	
}

.display_area{
	width: 100%;
	height: auto;
	position: absolute;	    
}

.gallery{
	width: 100%;
	height: auto;
	position: relative;
}
.gallery_img{
	width: 100%;
	height: auto;
	position: absolute; 
	
}

.cursors{
	width: auto;
	height: 20px;
	position: absolute;
	display: flex;
	right: 50px;
}

.cursors_on{
	width: 10px;
	height: 10px;
	border-radius:5px;
	background:rgba(247,92,10,1.0);
	margin-left: 10px;
}

.cursors_off{
	width: 10px;
	height: 10px;
	border-radius:5px;
	background:rgba(210,172,15,0.9);
	margin-left: 10px;
}

.button_left_right{
		width: 50px;
	height: 50px;
		position: absolute;
	background: rgba(255,255,255,0.0);
	border: none;
outline: none;
}

.button_left_right:active{
opacity:0.3;
}


.button_left_right_img{
	width: 50px;
	height: 50px;
}

.display_text{
	width: 100%;
	height: 100px;
	font-size: 46px;
	color:#ffffff;
	position: absolute;
	text-align:center;

}



html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<link href="test.css" rel="stylesheet">
<link href="translate.css" rel="stylesheet">
<script type="text/javascript" src="jquery-3.3.1.js"></script>
<title>主页</title>
</head>
<!-- style="overflow-x:hidden " -->
<body style="overflow-x:hidden ">


<!-- 整个轮播控件,图片加小圆点加左右键加文字 -->
<div class = "wheel_combination">  
    <!--     显示区域 -->
 	<div class = "display_area" id="display_area"> 
        <!--  	三张img水平画廊,宽度应该为三张图片的宽度 -->
 	     <div class = "gallery" id= "gallery"  >
 	      	<img class = "gallery_img" style="left: 0px;" id= "img0" src="../testimages/bg1.jpg"/>
 	 		<img class = "gallery_img" style="left: 0px;" id= "img1" src="../testimages/bg2.jpg"/>
 	 		<img class = "gallery_img" style="left: 0px;"id= "img2" src="../testimages/bg3.jpg"/>
 	     </div>
 	</div>
 	<!--     显示区域end -->
        <!--小圆点指示器 -->
        <!--JS根据图片个数动态添加 -->
 		<div class = "cursors" id = "cursors"> </div>
 	    <!--小圆点指示器end -->
 	    
 	    <button class="button_left_right" onclick="leftClick()"  id="button_left" style="left:20px"><img class = "button_left_right_img" src="../testimages/left_img.png"/></button>
 	    <button class="button_left_right" onclick="rightClick()" id="button_right" style="right:20px"><img class = "button_left_right_img" src="../testimages/right_img.png"/></button>
 	
 		<div class="display_text" id="display_text">日出江花红似火</div>
</div>
<!-- 整个轮播控件end -->


</body>

<script type="text/javascript" src="./test.js"></script>

</html>

js

//页面加载完成后执行轮播等方法
//var isInit = false;
//var img0 = document.getElementById("img0");
//img0.onload=function(){
//	if(!isInit){
//		isInit = true;
//		 addloadEvent(init);
//	}
//	};
 //alert("你好,我是一个警告框!");

addloadEvent(init);
 function addloadEvent(func){

	 var oldonload=window.onload;
	 if(typeof window.onload !="function"){
	  window.onload=func;
	 }
	 else{
	  window.onload=function(){
	  if(oldonload){
	   oldonload(); 
	  }
	  func();
	  }
	 }
	 }

 function init(){
	 var imgArray = new Array("bg1.jpg","bg2.jpg","bg3.jpg","bg4.jpg","bg5.jpg");
	 var textArray  = new Array("日出江花红胜火","春来江水绿如蓝","窗含西岭千秋雪","门泊东吴万里船","天街小雨润如酥");
	 
	 
	 var cursorsArray = new Array();
	 var imgNumber = 5;
	 var clickTimer = null;
	 var autoPlayTime = 4000;
	 //当前展示的图片
	 var imgIndex = 0;
	 var imgViewArray = new Array();
	 var gallery= document.getElementById("gallery");
	 var o = document.getElementById("display_area");
	 var img0 = document.getElementById("img0");
	 var img1 = document.getElementById("img1");
	 var img2 = document.getElementById("img2");
	 imgViewArray[0] = img0;
	 imgViewArray[1] = img1;
	 imgViewArray[2] = img2;
	 //获取显示区域的高度,设置圆点,文字,及左右按键的位置
	 var viewHeight = img0.offsetHeight;
	 //设置小圆点位置
	 var cursors =  document.getElementById("cursors");
	 cursors.style.top = viewHeight-30+"px";
	 //设置左右按钮的位置
	 var buttonLeft = document.getElementById("button_left");
	 var buttonRight = document.getElementById("button_right");
	 var textView = document.getElementById("display_text");
	 buttonLeft.style.top = (viewHeight-parseFloat(buttonLeft.offsetHeight))/2+"px";
	 buttonRight.style.top = (viewHeight-parseFloat(buttonRight.offsetHeight))/2+"px";
	 textView.style.top = viewHeight-70+"px";
	 buttonLeft.onclick = function () { 
		 //停止自动播放,三秒后再开始播放
		 stop();
		 if(clickTimer!=null){
			 clearInterval(clickTimer);
		 }
		 clickTimer=setInterval(function(){
			 play();
		 },3000); 
		 animate(100);
	 }
	 buttonRight.onclick = function () { 
		 //停止自动播放,三秒后再开始播放
		 stop();
		 if(clickTimer!=null){
			 clearInterval(clickTimer);
		 }
		 clickTimer=setInterval(function(){
			 play();
		 },3000);
		 animate(-100);
	 }
	 for(var cs = 0;cs<imgNumber;cs++){
		 var div = document.createElement("div");
		 if(imgIndex==cs){
			 div.className="cursors_on"; 
		 }else{
			 div.className="cursors_off";
		 }
		 cursorsArray[cs] = div;
	 	 cursors.appendChild(div);  
	 }
	 var leftImgIndex = imgIndex-1;
	 if(leftImgIndex<0){
		 //当前显示的是第一张,则当前显示的左边显示最后一张
		 leftImgIndex = imgNumber-1;
	 }
	 var midImgIndex = imgIndex;
	 var rightImgIndex = imgIndex+1;
	 if(rightImgIndex>(imgNumber-1)){
		 //当前显示的是最后一张,则右边显示第一张
		 rightImgIndex = 0;
	 }
	 $("#display_text").html(textArray[imgIndex]);
	 imgViewArray[0] .src="../testimages/"+imgArray[leftImgIndex];
	 imgViewArray[1] .src="../testimages/"+imgArray[midImgIndex];
	 imgViewArray[2] .src="../testimages/"+imgArray[rightImgIndex];
	 var oneWidth =  o.clientWidth||o.offsetWidth;
	 imgViewArray[0].style.left="-100%";
	 imgViewArray[1].style.left="0%";
	 imgViewArray[2].style.left="100%";
	
	 //每次移动间隔
	 var interval=10;
	 //总时间
	 var times = 400;
	 var isAnimate = false;
	 //移动动画    width左移或右移量-100 或100
	 function animate(width){
		 if(!isAnimate){
			 isAnimate = true;
			 textView.style.left = "-100%";
			 //每次移动距离
			 var speed=width/(times/interval);
			 //剩余需要移动的量
			 var offset = width;
			 go();
			 function go(){
				 if(offset!=0){
					 if(Math.abs(offset -speed)<Math.abs(speed)){
						 //最后一次移动
						 speed = offset;
					 }else{
						 speed=width/(times/interval); 
					 }
					 imgViewArray[0].style.left=parseFloat(imgViewArray[0].style.left)+speed+"%";//每次位移的值
					 imgViewArray[1].style.left=parseFloat(imgViewArray[1].style.left)+speed+"%";//每次位移的值
					 imgViewArray[2].style.left=parseFloat(imgViewArray[2].style.left)+speed+"%";//每次位移的值
					
					 offset = offset -speed; 
					 setTimeout(go,interval);
				 }else{					 
					 //动画结束
				
					 if(width>0){
						 //右移
						 imgIndex--;
						 if(imgIndex<0){
							 imgIndex = imgNumber-1;
						 }
						 
						 var f = imgViewArray[2];
						 imgViewArray[2] = imgViewArray[1];
						 imgViewArray[1] = imgViewArray[0];
						 imgViewArray[0] = f;
						 imgViewArray[0].style.left="-100%";
						 imgViewArray[1].style.left="0%";
						 imgViewArray[2].style.left="100%";
						  leftImgIndex = imgIndex-1;
						 if(leftImgIndex<0){
							 //当前显示的是第一张,则当前显示的左边显示最后一张
							 leftImgIndex = imgNumber-1;
						 }
						  midImgIndex = imgIndex;
						  rightImgIndex = imgIndex+1;
						 if(rightImgIndex>(imgNumber-1)){
							 //当前显示的是最后一张,则右边显示第一张
							 rightImgIndex = 0;
						 }
						 
						 imgViewArray[0] .src="../testimages/"+imgArray[leftImgIndex];
						// imgViewArray[1] .src="../images/"+imgArray[midImgIndex];
						 imgViewArray[2] .src="../testimages/"+imgArray[rightImgIndex];
					 }else{
						 //左移
						 imgIndex++;
						 if(imgIndex==imgNumber){
							 imgIndex = 0;
						 }
						 var f = imgViewArray[0];
						 imgViewArray[0] = imgViewArray[1];
						 imgViewArray[1] = imgViewArray[2];
						 imgViewArray[2] = f;
						 imgViewArray[0].style.left="-100%";
						 imgViewArray[1].style.left="0%";
						 imgViewArray[2].style.left="100%";
						  leftImgIndex = imgIndex-1;
						 if(leftImgIndex<0){
							 //当前显示的是第一张,则当前显示的左边显示最后一张
							 leftImgIndex = imgNumber-1;
						 }
						  midImgIndex = imgIndex;
						  rightImgIndex = imgIndex+1;
						 if(rightImgIndex>(imgNumber-1)){
							 //当前显示的是最后一张,则右边显示第一张
							 rightImgIndex = 0;
						 }
						 
						 imgViewArray[0] .src="../testimages/"+imgArray[leftImgIndex];
						 //imgViewArray[1] .src="../images/"+imgArray[midImgIndex];
						 imgViewArray[2] .src="../testimages/"+imgArray[rightImgIndex];
					 }
					 
					 for(var cs = 0;cs<imgNumber;cs++){
						 if(imgIndex==cs){
							cursorsArray[cs].className="cursors_on";
						 }else{
							 cursorsArray[cs].className="cursors_off";
						 }
					 }
					 
					 //文本进入动画
					 //textView.style.left = "0%";
					 $("#display_text").html(textArray[imgIndex]);
					 var offsetText = 100;
					 var speedText =offsetText/40; 
					 intoText();
					 function intoText(){
						 //alert("文字left"+parseFloat(textView.style.left));
						 
						 if(offsetText!=0){
							 if(Math.abs(offsetText -speedText)<Math.abs(speedText)){
								 //最后一次移动
								 speedText = offsetText;
							 }else{
								 speedText=100/40; 
							 }
							 textView.style.left=parseFloat(textView.style.left)+speedText+"%";//每次位移的值
						
							 offsetText =offsetText -speedText; 
							 setTimeout(intoText,10);
						 }else{
							 //文字动画结束
							 isAnimate = false;
						 }
					 }
		
				 }
				}
		 }
		 
	 }
	 
	 play();
	 //自动播放
	 function play(){
		 if(clickTimer!=null){
			 clearInterval(clickTimer);
		 }
		 timer=setInterval(function(){
			 animate(-100); 
		 },autoPlayTime);
	}
	 //停止播放
	 function stop(){
	 clearInterval(timer);
	 }
	 
	 $(window).resize(function(){ 
		  var wHeight = $(window).height();
		  var wWidth = $(window).width();
		  //获取显示区域的高度,设置圆点,文字,及左右按键的位置
		var viewHeight = img0.offsetHeight;
		 //var cursors =  document.getElementById("cursors");
		 cursors.style.top = viewHeight-30+"px";
		 buttonLeft.style.top = (viewHeight-parseFloat(buttonLeft.offsetHeight))/2+"px";
		 buttonRight.style.top = (viewHeight-parseFloat(buttonRight.offsetHeight))/2+"px";
		 textView.style.top = viewHeight-70+"px";
		})

 }
 

 

 
 
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值