换键盘
你好,很高兴能看到你提出的问题,对于你代码的主体逻辑我没有完全看懂,不过我也曾遇到你这样的问题,你看下是否是某个方法没有调用,或者参数设置错误等,参考一下老师的源码,兴许对你会有些帮助。
贴代码呀 直接问这谁顶得住啊
举个列子
#banner{
width: 100%;
height: 460px;
position: relative;
overflow: hidden;
}父容器
#box{
width: 500%;
height: 460px;
position: absolute;
z-index: 1;
}放置图片的div
#box img{
height: 460px;
width: 20%;
float: left;
cursor: pointer;
} img的格式
这是我在做百分比布局时的一点心得
上述是假设你放置五张图片时,为了让每一张都百分之百显示出来所以box的宽度设为500%
由于继承,但每一张的img由于500%的20%,刚好是100%,这样图片就可以完全显示出来
你打开控制台,看看浏览器报错信息是什么; 你的this.num 是什么?估计出错在这里
span是内联元素,设置宽高、内边距、外边距都没有效果,将它的display="inline-block",这样设置就好了
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>轮播图</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
text-decoration: none;
}
body {
padding: 20px;
}
#container {
position: relative;
width: 600px;
height: 400px;
border: 3px solid #333;
overflow: hidden;
}
#list {
position: absolute;
z-index: 1;
width: 4200px;
height: 400px;
}
#list img {
float: left;
width: 600px;
height: 400px;
}
#buttons {
position: absolute;
left: 250px;
bottom: 20px;
z-index: 2;
height: 10px;
width: 100px;
}
#buttons span {
float: left;
margin-right: 5px;
width: 10px;
height: 10px;
border: 1px solid #fff;
border-radius: 50%;
background: #333;
cursor: pointer;
}
#buttons .on {
background: orangered;
}
.arrow {
position: absolute;
top: 180px;
z-index: 2;
display: none;
width: 40px;
height: 40px;
font-size: 36px;
font-weight: bold;
line-height: 39px;
text-align: center;
color: #fff;
background-color: RGBA(0, 0, 0, .3);
cursor: pointer;
}
.arrow:hover {
background-color: RGBA(0, 0, 0, .7);
}
#container:hover .arrow {
display: block;
}
#prev {
left: 20px;
}
#next {
right: 20px;
}
</style>
</head>
<body>
<!--父容器container存放所有内容,
子容器list存放图片。
子容器buttons存放按钮小圆点
-->
<div id="container">
<div id="list" style="left: -600px">
<img src="img/05.jpg" alt="1">
<img src="img/01.jpg" alt="1">
<img src="img/02.jpg" alt="2">
<img src="img/03.jpg" alt="3">
<img src="img/04.jpg" alt="4">
<img src="img/05.jpg" alt="5">
<img src="img/01.jpg" alt="5">
</div>
<div id="buttons">
<span index="1"></span>
<span index="2"></span>
<span index="3"></span>
<span index="4"></span>
<span index="5"></span>
</div>
<a href="javascript:;" id="prev"><</a>
<a href="javascript:;" id="next">></a>
</div>
<script>
window.onload=function (){
var container =document.getElementById('container');
var list=document.getElementById('list');
var buttons=document.getElementById('buttons').getElementsByTagName('span');//获取5个按钮
var prev=document.getElementById('prev');//上一个
var next=document.getElementById('next');//下一个
var index=1;
var timer;
/*点亮小圆点*/
function showButton(){
for(var i=0;i<buttons.length;i++){
if(buttons[i].className=='on'){
buttons[i].className='';
break;
}
}
buttons[index-1].className='on';
}
/*箭头点击事件**/
function animate(offset){//封装按钮左右点击,传参offset
var newLeft=parseInt(list.style.left)+offset;
var time=300;//位移总时间
var interval=10;//位移间隔
var speed=offset/(time/interval);//每次位移量
function go(){
if((speed<0 && parseInt(list.style.left)>newLeft) || (speed >0&&parseInt(list.style.left)<newLeft)){
list.style.left=parseInt(list.style.left)+speed+'px';
/*定时器*/
setTimeout(go,interval);
}
else{
list.style.left=newLeft+'px';
/* 判断是否滚动到附属图上,滚动到附属图上归位*/
if(newLeft> -600){
list.style.left = -3000 + 'px';
}
if(newLeft< -3000){
list.style.left = -600 + 'px';
}
}
}
go();
}
function play(){
timer=setInterval(function (){
next.onclick();
},3000);
}
function stop(){
clearInterval(timer);
}
next.onclick=function (){
if(index==5){
index=1;
}
else{
index +=1;
}
showButton();
animate(-600);//点击右箭头-600
}
prev.onclick=function (){
if(index==1){
index=5;
}
else{
index -= 1;
}
showButton();
animate(-600);//点击左箭头600
}
for(var i=0;i<buttons.length;i++){
//原始值
buttons[i].onclick=function (){
if(this.className=='on'){
return;
}
var myIndex=parseInt(this.getAttribute('index'));
var offset=-600 *(myIndex -index);
animate(offset);
index=myIndex;
showButton();
}
}
container.onmouseover=stop;
container.onmouseout=play;
}
</script>
</body>
</html>
width:100%;意思是让图片占据父容器100%,这里面图片假设比父容器大,倒是不会影响,如果比父容器小,图片会模糊,假设图片比例与父容器比例相差比较大,设置:height:100%图片是会发生变形的。假设把图片设定为背景图片,需要background-size:100% 100%;前面一个是宽度100%,后面一个是高度100%。
index是自定义属性 在后面JS控制的时候 需要用到index和图片的left来控制轮播图的移动
如果仅仅只是全屏轮播 ,可以将高度 宽度设置为视口的大小
相当于动态设置图片宽。不论怎么设置宽度百分比,最终图片宽度都会落到具体的像素值上。
找到你图片所在的标签,获取到这个标签的宽度属性就行了。
因为包含它的容器有宽度 所以你看不到全部 而且容器设置了overflow:hidden;属性 这就只能看见一张图片了
之所以看到跳转是因为轮播图要实现无限滚动就需要无限的图片 要让5张图片接连起来 在看到最后一张图片的时候会有一张过渡图片 也就是第一张图片拿到里面显示 效果是感觉五张图片真的接连起来了 不会产生空白过渡
这里说不太清楚 自己在浏览器里面多多调试 以及看代码样式里面overflow:hidden; 看看隐藏掉是什么效果
用absolute使图片列表相对于父元素进行绝对定位,并且脱离文档,好做移动
ctrl + shift +f
都是这样的
的看源码
这种方式我也用到过,用意是这样的,假设有6张图,焦点图的方式是从1-6的顺序滚动播放图片,之后要从6回到1直接跳转的话就显得很突兀,一下从6跳到1人眼可以很明显分辨出,就没有一种一直在向后滚动的感觉,这个时候在6号图后面再加一张1号图,以1234561的顺序排列,实际上最后一张也是1号图,这样跳转到第一张图的话就好像图片未动,实际上你的位置已经从最后到了最前,但是又不显得突兀,给人一种一直在向后滚动播放的视觉上错觉,所以这种做法并不多余。
来读读这个 http://www.cnblogs.com/LIUYANZUO/p/5679753.html
跟我一样, 吗的 把那个display:none 删除就有了 , 但是后面的又不行
设置原来图片的大小 根据图片大小设置外面DIV的大小
初始值啊,为了显示真正的第一张图片
小圆点的父容器绝对定位,left:50% margin-left= - (容器宽度的一半)
因为需要模拟无限滚动的效果,就会在整个list中前后各插一张图片,那么5张就变成7张了!也就是3000+2*600=4200 ...具体原理可以再看看原理介绍和无限滚动这两课程。
<a> 标签的 href 属性用于指定超链接目标的 URL,href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符和 JavaScript 代码段。
这里的href="javascript:;",其中javascript:是伪协议,它可以让我们通过一个链接来调用javascript函数.而采用这个方式 javascript:;可以实现a标签的点击事件运行时,如果页面内容很多,有滚动条时,页面不会乱跳,用户体验更好。
可以再教程右边下载源码
span是内联元素,宽度高度设置无效;而且在<span></span>,没有内容情况下当然不显示。
float不紧可以左浮动使其在一行显示,而且会转化为块级元素使得宽高设置生效
大致这个意思,可以看一下http://www.imooc.com/learn/121 张鑫旭关于浮动的深入讲解 5-3 float与display:block化,