我想让圆点随着图片增加而增加,然后怎加了代码,完整代码如下,老师给看一下这样子写是否规范?

我想让圆点随着图片增加而增加,然后怎加了代码,完整代码如下,老师给看一下这样子写是否规范?

// 封装一个代替getElementById()的方法
function byId( id ){
	return typeof(id) === 'string'? document.getElementById(id): id;
}

// 全局变量
var main = byId('main'),
	bannerBox = byId('bannerBox'),
	oLi = bannerBox.getElementsByTagName('li'),
	liLen = oLi.length,
	prev = byId('prev'),
	next = byId('next'),
	dots = byId('dots'),
	dotSpan = null,
	index = 0,
	timer = null;

function slideImg(){
	// 自动添加dots下的span
	for( var i=0; i<liLen; i++ ){
		dots.innerHTML += '<span></span>';
		dotSpan = dots.getElementsByTagName('span');
	}
	
	
	// 利用间歇调用,实现自动切换图片
	function autoChange(){
		timer = setInterval(function(){
			// 判断索引值
			index++;
			if( index>=liLen ){
				index = 0;
			}
			// 调用切换图片函数
			changeImg();
		},3000)
	}
	autoChange();
	
	// 鼠标划过main,清除定时器
	main.onmouseover = function(){
		// 清除定时器
		if( timer ){ clearInterval( timer ); }
	}
	
	// 鼠标离开,启动定时器,开始切换图片
	main.onmouseout = autoChange;
	
	// 遍历所有圆点,且绑定点击事件,点击圆点切换图片
	for( var j=0; j<liLen; j++ ){
		dotSpan[0].className = 'active';
		// 给所有span添加一个id的属性,值为j,作为当前span的索引
		dotSpan[j].id = j;
		
		dotSpan[j].onclick = function(){
			index = this.id;
			
			// 调用changeImg函数,切换图片
			changeImg();
		}
	}
	
	// 下一张
	next.onclick = function(){
		index++;
		if( index>=liLen ){
			index=0;
		}
		changeImg();
	}
	
	// 上一张
	prev.onclick = function(){
		index--;
		if( index<0){
			index= liLen-1;
		}
		changeImg();
	}
}

function changeImg(){
	for( var i=0; i<liLen; i++ ){
		oLi[i].style.display = 'none';
		dotSpan[i].className = '';
	}
	
	oLi[index].style.display = 'block';
	dotSpan[index].className = 'active';
}


slideImg();


正在回答

登陆购买课程后可参与讨论,去登陆

4回答

你好,经测试,实现的效果很好,想法也很棒,继续加油!

祝学习愉快~

  • 桔七 提问者 #1
    非常感谢!
    2018-01-29 09:56:40
提问者 桔七 2018-01-28 12:50:17
@charset "utf-8";
/* reset */
*{
	margin: 0;
	padding: 0;
}
ul{
	list-style: none;
}
body{
	font-family: "微软雅黑";
	color: #14191e;
}

/* main */
.main{
	width: 1200px;
	height: 460px;
	margin: 50px auto;
	overflow: hidden;
}


/* banner */
.banner,.banner ul{
	width: 1200px;
	height: 460px;
	position: relative;
}
.banner-imgs li{
	position: absolute;
	display: none;
}
.banner-imgs li.active{
	display: block;
}

.btn{
	width: 40px;
	height: 80px;
	position: absolute;
	top: 50%;
	left: 244px;
	margin-top: -40px;
	background: #f00;
	background: url(../img/arrow.png) no-repeat center;
}
.btn:hover{
	background-color: #333;
	opacity: 0.8;
	filter: alpha(opacity=80);
}
.prev{
	left: 244px;
	-webkit-transform: rotate(180deg);
	transform: rotate(180deg);
}
.next{
	right: 0;
	left: auto;
}


.dots{
	position: absolute;
	right: 20px;
	bottom: 24px;
	text-align: right;
	font-size: 0;
}
.dots span{
	display: inline-block;
	width: 12px;
	height: 12px;
	border-radius: 50%;
	background: rgba(7,17,27,0.4);
	box-sizing: border-box;
	border: 1px solid #fff;
	cursor: pointer;
	margin: 4px;
}
.dots span:hover,
.dots span.active{
	background-color: #fff;
	border-color: rgba(7,17,27,0.4);
}

和HTML

<div class="main" id="main">
		<!-- 图片轮播 -->
		<div class="banner">
			<!-- 图片盒子 -->
			<ul class="banner-imgs" id="bannerBox">
				<li class="active">
					<a href="" class="active">
						<img src="img/bg1.jpg" alt=""/>
					</a>
				</li>
				<li>
					<a href="">
						<img src="img/bg2.jpg" alt=""/>
					</a>
				</li>
				<li>
					<a href="">
						<img src="img/bg3.jpg" alt=""/>
					</a>
				</li>
				<li>
					<a href="">
						<img src="img/bg2.jpg" alt=""/>
					</a>
				</li>
				<li>
					<a href="">
						<img src="img/bg3.jpg" alt=""/>
					</a>
				</li>
			</ul>
			
			<!-- 左右箭头 -->
			<a href="javascript:void(0);" class="btn prev" id="prev"></a>
			<a href="javascript:void(0);" class="btn next" id="next"></a>
			
			<!-- 圆点按钮 -->
			<div class="dots" id="dots">
				<!--<span class="active"></span>
				<span></span>
				<span></span>-->
			</div>
		</div>
	</div>


好帮手慕糖 2018-01-28 12:29:50

你好,只有部分代码不能确定问题,建议:将完整的代码粘贴过来,包括css与html哦。

祝学习愉快~

  • 提问者 桔七 #1
    完整代码我已经贴出来了,老师你给看一下
    2018-01-28 12:52:06
提问者 桔七 2018-01-27 16:12:29

增加的代码是19~24行的:

 // 自动添加dots下的span
    for( var i=0; i<liLen; i++ ){
        dots.innerHTML += '<span></span>';
        dotSpan = dots.getElementsByTagName('span');
    }

和51行:

dotSpan[0].className = 'active';


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
HTML5与CSS3实现动态网页 2018
  • 参与学习       1887    人
  • 提交作业       4643    份
  • 解答问题       5760    个

有HTML和CSS基础,却不知道如何进阶?本路径带你通过系统学习,完成从“会做网页”到“做出好的动态网页”的蜕变,迈出成为前端工程师的第一步。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师