我又思考了,修改了一部分问题,还是有问题
来源:5-6 作业题
迷失的小麦
2019-12-20 11:54:31
https://class.imooc.com/course/qadetail/179927
<!doctype html>
<html><head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/style.css">
<title>轮播图</title>
</head>
<body>
<div id="menu">
<div id="nav">
<div class="bg">首页</div>
<div>点击查看</div>
<div>会自动的</div>
<div>我的网站</div>
</div>
<div id="banner">
<div id="hezi">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div id="button">
<div></div>
<div></div>
</div>
</div>
</body>
<script>
window.onload=function(){
//封装查找节点的函数
function id(id){
return typeof(id)==="string"?document.getElementById(id):id;
}
var menu=id("menu"),//最外面的盒子
nav=id("nav"),//导航条
navneirong=nav.getElementsByTagName("div"),
banner=id("banner"),//图片
hezi=id("hezi"),//移动的盒子
img=hezi.getElementsByTagName("div"),
imgWidth=img[0].offsetWidth,//图片的宽度
length=img.length,//图片的个数
button=id("button").getElementsByTagName("div"),//按钮
timer=null,
timer2=null,
index=0;
//封装创建事件的函数
function addHandler(element, type, handler) {
if (element.addEventListener) {
element.addEventListener(type, handler, true);
}
else if (element.attachEvent) {
element.attachEvent('on' + type, handler);
}
else {
element['on' + type] = handler;
}
}
//利用定时器封装滑动效果的函数
function donghua(){
clearInterval(timer);//先清除定时器
timer=setInterval(function(){
var juli=hezi.offsetLeft;
var target=-index * imgWidth;
var panduan=juli > target ? true : false;
//主要是这段代码不理解,为什么juli-=10;?逻辑分析一下?而且肯定有问题
if(panduan){
juli-=40;
}else{
juli+=40;
}
if (panduan ? juli > target : juli < target) {
hezi.style.left = juli + "px"; //如果当前位置不是在目标位置则进行位置处理
} else {
clearInterval(timer);
hezi.style.left = target + "px";
}/**/
},10);
}
//封装自动轮播的效果的函数
function dingshiqi(){
timer2=setInterval(function(){
if (index == len - 1) {//确定图片的索引
index = 0;
hezi.style.left = 0 + "px";
}
index++;
donghua();
for(var j=0;j<navneirong.length;j++){//切换按钮
navneirong[j].className="";
};
navneirong[index].className="bg";
},3000);
}
//封装解除自动轮播的函数
function qingchu(){
if(timer2){clearInterval(timer2);}
}
//给向右移动的按钮添加事件
addHandler(button[1],"click",function(){
if(index==0){//确定图片的索引
index=length-1;
hezi.style.left=-index * imgWidth + "px";
navneirong[0].className="bg";
}
index--;
donghua();
for(var j=0;j<navneirong.length;j++){//改变导航条
navneirong[j].className="";
};
navneirong[index].className="bg";
});
//给向左移动的按钮添加事件
addHandler(button[0],"click",function(){
if (index == len - 1) {//确定图片的索引
index = 0;
hezi.style.left = 0 + "px";
navneirong[0].className="bg";
}
index++;
donghua();
for(var j=0;j<navneirong.length;j++){//改变导航条
navneirong[j].className="";
};
navneirong[index].className="bg";
});
//给导航条添加事件
for(var i=0,len=img.length;i<len-1;i++){
navneirong[i].id=i;
addHandler(navneirong[i],"click",function(){
index=this.id;
for(var d=0;d<navneirong.length;d++){
if(d==index){
navneirong[d].className="bg";
img[d].className="";
}else{
navneirong[d].className="";
img[d].className="hide";//隐藏除当前选中的图片
}
if(index==img.length-1){
navneirong[0].className="bg";
index=0;
img[0].className="";
img[4].className="hide";
}
//添加一个判断,当图片为最后一张跳转第一张
}
});
}
//添加自动轮播事件
dingshiqi();
addHandler(menu,"mouseover",qingchu);
addHandler(menu,"mouseout",dingshiqi);
}
</script>
</html>1回答
好帮手慕糖
2019-12-20
同学你好,关于同学的问题回答如下:
1、注释中的问题,即://主要是这段代码不理解,为什么juli-=10;?逻辑分析一下?
在同学的另一个问题中已经进行了回复,可以查看问题:https://class.imooc.com/course/qadetail/179927
2、同学的这个思路本身就是错误的,自动滚动与左右按钮改变的都是left值,而点击选项卡的时候,又是使用了显示隐藏,导致left值无法计算。
我们使用“推拉”效果的轮播图(就是改变left值这种),一般是不会添加选项卡的。直接自动轮播或者添加个左右的箭头即可。另外,本次作业中轮播图直接使用display改变现实隐藏就行了,不需要使用改变left的方法。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
相似问题
回答 3
回答 3