javascript无缝全屏轮播

虽然平时能利用插件来实现,但是总是觉得,如果连个无缝轮播都写不出来,还玩个毛线;

其实现在还真的是玩毛线,因为代码都是别人的,不过嘛,很快就变成是我的啦!

代码还没封装成插件,其实我也还没弄清楚。

下面有很多注释的,如果路过的你认为有错误,请指出来啊,使劲拍。

html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Examples</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link href="" rel="stylesheet">
    <style>
    html,body{
    	margin:0px;
    	padding:0px;
    }
    .wrap{
        width: 1920px;
        height: 450px;
        overflow: hidden;
        margin: 0 auto;
        position: relative;
    }
    .list{
        position: absolute;
    }
    img{
        width: 1920px;
        height: 450px;
        float: left;
    }
    a{
        text-decoration: none;
        position: absolute;
        top:100px;
        display: inline-block;
        width: 85px;
        line-height: 70px;
        background: rgba(3,3,3,.3);
        color: #fff;
        font-weight: 700;
        font-size: 50px;
        text-align: center;
        display: none;
    }
    .buttons{
        position: absolute;
        bottom: 20px;
        width: 100%;
        text-align: center;
    }
    span{
        width: 15px;
        height: 15px;
        border-radius: 50%;
        display: inline-block;
        cursor: pointer;
        border: 1px solid #fff;
    }
    span~span{
        margin-left: 20px;
    }
    .light{
        background-color: #fff;
    }
    </style>
</style>
</head>
<body>
    <div class="wrap" id="wrap">
    	<div class="list" id="list" style="left:-1920px;">
    		<img src="4.jpg">
    		<img src="1.jpg">
    		<img src="2.jpg">
    		<img src="3.jpg">
    		<img src="4.jpg">
    		<img src="1.jpg">
    	</div>
    	<a href="javascript:;" id="prev"><</a>
    	<a href="javascript:;" id="next" style="right:0;">></a>
    	<div class="buttons" id="buttons">
    		<span class="light"></span>
    		<span ></span>
    		<span ></span>
    		<span ></span>
    	</div>
    </div>
</body>
</html>

js

<script type="text/javascript">
	window.onload = function(){
		var index = 1;
		var b = false;
        var timer;
		var wrap = document.getElementById(‘wrap‘);
		var list = document.getElementById(‘list‘);
		var prev = document.getElementById(‘prev‘);
		var next = document.getElementById(‘next‘);
		var buttons = document.getElementById(‘buttons‘);
		var dots = document.getElementsByTagName(‘span‘);
		var width = list.getElementsByTagName(‘img‘)[0].width;
		var length = dots.length;

		//初始化
		list.style.width = (length * width +2*width)+ ‘px‘;

        //给span添加索引
        function addIndex(){
        	for(i = 0 ; i < dots.length ; i++){
        		dots[i].setAttribute(‘index‘,i+1) ;

        	}
        }
        addIndex();

		//左右按钮鼠标滑入显示
		wrap.onmouseover = function(){
			prev.style.display = ‘block‘;
			next.style.display = ‘block‘;
			stop();
		};

		//左右按钮鼠标滑出隐藏
		wrap.onmouseout = function(){
			prev.style.display = ‘none‘;
			next.style.display = ‘none‘;
			play();
		};

		//上一张
		function prevImg(){
			//防止连续滚动出现bug
			if(b){
                return;
			}

			//上一张函数
			slider(width);

			//索引,pagination用到
			index--;
			if(index < 1){
				index = length;
			}else if(index > length){
				index = 1;
			}

            //pagination函数
            pagination();
		}

		//下一张
		function nextImg(){
			//防止连续滚动出现bug
			if(b){
                return;
			}
			//上一张函数
			slider(-width);

			//索引,pagination用到
			index++;
			if(index < 1){
				index = length;
			}else if(index > length){
				index = 1;
			}

            //pagination函数
            pagination();
		}

		//上一张,下一张,触发其他函数变化
		function btn(e){
			if(b){
				return;
			}
            //兼容ff,ie
			e = window.e || e;
			var target = e.target ? e.target : e.srcElement;
            if(target.nodeName.toLowerCase() == ‘span‘){
            	var index1 = target.getAttribute(‘index‘);
            	//获取目标索引图片和当前图片的距离
                var offset = (index - index1) * width;
                slider(offset);
                index = index1;
                pagination();
            }
		}

        //切换核心函数
        function slider(offset){

            b = true ;
            //完成时间
            var time = 500;
            //间隔时间
            var inter = 5;
            //间隔时间内的移动距离,需要优先级限制,不然会出现问题(6/3/1)与(6/(3/1))结果不一

            var speed = Math.ceil(offset/(time/inter));

            //每次运动后的距离
            var left = parseInt(list.style.left) + offset;

            //运动函数
            var go = function(){

            	//当前left
            	var curLeft = parseInt(list.style.left);

            	//当滑动出处于中间,并且left没有完成动画时
            	if((speed > 0 && curLeft < left) || (speed < 0 && curLeft > left)){

                    //运动(根据speed,的正负,决定左右方向)
            		list.style.left =curLeft + speed + ‘px‘;
            		//延迟动画,是否执行取决于条件,也就是距离是否返程

            			setTimeout(go,inter);

            	}
            	//当处于两端的时候
            	else{

            		//首先执行完成运动函数
            		list.style.left = left + ‘px‘;
                    //根据left的值,决定是否重新设置left;
                    //当滑到最右
                    if(left < -(width * length)){
                    	list.style.left = -width + ‘px‘;
                    }
                    //当滑到最左
                    else if(left > -width){
                    	list.style.left = -(width * length) + ‘px‘;
                    };
                    b = false;
            	};
            };
            go();
        };

        //绑定dom
        function addEvent(element, event, listener){
        	//兼容ff,ie
        	if(element.addEventListener){
        		element.addEventListener(event,listener,false);
        	}else{
        		element.attachEvent(‘on‘+event,listener);
        	};
        };

        //触发点击事件
        addEvent(prev,‘click‘,prevImg);
        addEvent(next,‘click‘,nextImg);
        addEvent(buttons,‘click‘,btn)

        //分页函数
        function pagination(){

        	//遍历span,找出当前点亮的span
        	for( i = 0 ; i< dots.length ; i++){
        		if(dots[i].className == ‘light‘){
        			dots[i].className = ‘‘;
        			//跳出循环,执行循环后的函数
        			break;
        		};
        	};
        	//使span索引为当前index-1(span的索引从0开始)的点亮
        	dots[index -1].className = ‘light‘;
        };

        //自动轮播
        function play(dire,interval){
            interval = interval || 3000;
            if(dire == ‘left‘){
            	timer = setInterval(prevImg,interval);
            }else{
            	timer = setInterval(nextImg,interval);
            }
        };
        play(‘right‘,3000);

        //终止轮播
        function stop(){
        	clearInterval(timer);
        };

        //全屏滚动,图片居中;
        function center(){
        	var viewWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
        	var imgWidth = width;
            var posCenter = (imgWidth - viewWidth) / 2;

            wrap.style.left = -posCenter + ‘px‘;
        }
        window.onresize = center;

	};
</script>

  

时间: 2024-12-09 12:33:42

javascript无缝全屏轮播的相关文章

加载并全屏轮播加载的其他网站的页面

加载并全屏轮播加载的其他网站的页面 一.  设计思路 1.使用iframe标签加载其他网站页面 2.通过js替换iframe的加载链接 3.通过js的定时器实现轮播 4.通过js实现全屏 二.代码小解 1.加载页面 <iframe src="https://www.baidu.com" width='100%' height='100%' frameborder='0' name="_blank" id="_blank"></i

淘宝店铺装修如何实现全屏轮播

淘宝店装移植有一个神秘的模块,那就是—全屏轮播,这个神奇的模块,能提高店铺的档次,给与顾客视觉冲击,提升顾客印象但是由于淘宝常规用户不支持CSS(用来定义网页样貌的能力),所以我们无法用简单的div+CSS来做出属于自己的全屏轮播强大的装修师们几经研究,终于摆脱了CSS的束绷,结合淘宝的轮播组件,单靠DIV代码就实现了全屏轮播(有缺点) 那么.不要CSS,我们怎么实现全屏轮播呢? 首先我要告诉大家全屏轮播的核心CSS属性—position:absolute 第一节:核心属性 position :

淘宝店如何加入全屏轮播图片

淘宝店如何加入全屏轮播图片? | 浏览:5779 | 更新:2014-06-11 11:31 | 标签: 淘宝 1 2 3 4 5 分步阅读 百度经验:jingyan.baidu.com 开淘宝店的朋友,看到很多店铺有各式各样的轮播大图,很高端大气,您是否也想拥有一款属于自己的轮播图呢?今天我就交给大家如何制作全屏轮播图. 百度经验:jingyan.baidu.com 工具/原料 电脑/网络 百度经验:jingyan.baidu.com 方法/步骤 1 登录淘宝店. 登录到您的淘宝店,点击“卖家

关于最近在做的一个js全屏轮播插件

最近去面试了,对方要求我在一个星期内用原生的js代码写一个全屏轮播的插件,第一想法就是跟照片轮播很相似,只是照片轮播是有定义一个宽高度大小已经确定了的容器用来存储所有照片,然后将照片全部左浮动,利用margin-left的值不断变化,来改变显示哪张照片,当达到最后一张的时候,将第一张照片appendChild到最后一张照片的后面,如果有左右移动的话,当到达第一张照片时,还要继续左移动的话,就将最后一张照片利用insertBefore,将最后一张照片放在第一张照片的前面,这两个方法都只是改变子元素

淘宝店铺首页全屏轮播图制作

淘宝店铺首页全屏轮播图制作 | 浏览:1081 | 更新:2014-09-27 12:03 | 标签: 淘宝 很多朋友都想要做全屏轮播图,接下来我来说说我的经验 工具/原料 美图秀秀 方法/步骤 1.首先要制作或者搜寻图片宽度1920高度610的高画质图片 2.上传到淘宝图片空间,并复制其连接 3.将复制的连接替换到如下图以“jpg”结尾的那个地方.(有3个地方,可用3张图替换) 4.复制代码,进入淘宝店铺装修页面,新建“自定义内容区” 5.将自定义内容区置于顶部,编辑,输入代码界面,黏贴代码,

全屏banner及全屏轮播

一.全屏banner 1.设置网页图片全屏banner <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> * { margin: 0; padding: 0; } .pic { width: 100%; height: 600px; backgroun

升级版的全屏轮播图

具备的功能: 1.左右自动轮播 2.鼠标悬停在图片上时,停止轮播,移除时,开始轮播 3,点击导航圆点,移到响应位置图片,同时导航圆点有0.3秒的显示特效 4.鼠标移到屏幕左右时,出现线性渐变特效,点击,会左右移到图片 最终结果图: 完整代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title>

实现全屏轮播,并且轮播div中的文字盒子一直自动垂直居中

效果如下: 直接上代码了: 说明:轮播图基于swiper.js,自行下载.css在最后 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.

javascript无缝流畅动画轮播,终于让我给搞出来了。

自己一直想写一个真正能用的轮播图,以前是写过一个,但是不是无缝的轮播,感觉体验很差,这个轮播之前也搞了很多实例,看了很多代码,但是脑子总转不过弯,为什么在运动到一定距离后可以突然转回到原始位置,而没有出现运动情况?为什么我清楚定时器了,还是出现定时器重叠的情况,导致轮播混乱?如何让左右按钮,分页按钮,轮播函数联系起来,在触发一个事件的时候,轮播能正常运行?如何在第一个li的时候向左(上一张)滑动? 平时自己有空就想,试过很多方法,但是始终搞不出来,今天看了别人写的插件,后发现: 1.当ul滚动到