zoukankan      html  css  js  c++  java
  • (原)原生js封装的焦点图(幻灯片)效果一

    最近想对网站上比较常用的效果都用原生的代码做一个整理和封装,前一阵做了个弹出层,那么就接着热炒热卖,今天刚好还在中秋放假期间,就顺便按照以前常用的思路,写了个焦点图播放效果。

      恩,说到焦点图,网上可是一搜一大堆,基本上随便打开一个网站首页,百分之八九十都能看到类似的效果,不管是轮播的,淡入淡出的,或是其他更为复杂的效果....

    淘宝首页上轮播banner

    163.com上一个版块的类似效果腾讯上的一个效果

    不管外表长什么样子,只要轮播的过渡效果一样,那就是同一种算法,以淘宝上的轮播效果为例,下面跟就是刚写的仿淘宝的焦点图效果:(图片都是刚从taobao上抓下来的)

    • 1
    • 2
    • 3
    • 4
    • 5

    上一个 下一个

    恩恩,看了例子,下面函数调用的几个参数,引入js后,调用Hongru.slider.init(id, options)即可,参数id为要滚动的ul列表的父标签id,options为一个对象,可选参数有auto(自动滚动时间间隔秒数,为0时表示不自动滚动),vertical(true时垂直滚动,false横向滚动),navId(控制器的ul标签id),curClass(当前状态下控制器样式类名),index(表示初始化时从第几个开始,默认为0,表示从第一个开始),如下:

    Hongru.slider.init('slider',{	
    	auto:3,
    	vertical:1,
    	navId:'nav',
    	curClass:'nav',
    	index:0});
    

    另需要注意的一点,滚动内容和控制器都需要放在ul无序列表里。。。。

    下面附上js源码:

    var Hongru = {}, H$ = function(id){return document.getElementById(id)}, H$$ = function(c,p){return p.getElementsByTagName(c)}
    Hongru.slider = function(){
    	return{
    		init:function(id,options){
    			var ul = this.u = H$$('ul',H$(id))[0], li = H$$('li',ul); this.l=li.length; this.index = 0;
    			if(options.navId&&options.curClass){this.nav = H$$('li',H$(options.navId)), this.c = options.curClass;}
    			this.a=options.auto||0; this.v=options.vertical||0;H$(id).style.overflow = 'hidden';H$(id).style.position = 'relative';ul.style.position='absolute';
    			if(this.v){ul.style.top=0; this.h=options.height||li[0].offsetHeight; ul.style.height=(this.l*this.h)+'px';}
    			else{ul.style.left=0; this.w=options.width||li[0].offsetWidth; ul.style.width=(this.l*this.w)+'px';}
    			this.pos(options.index||0,this.a?1:0);
    		},
    		
    		pos:function(pos,a){
    			clearInterval(this.u.posAnim); clearInterval(this.u.auto);
    			var curPos=this.v?parseInt(this.u.style.top):parseInt(this.u.style.left),
    			correctPos=this.v?pos*this.h:pos*this.w, 
    			direction = correctPos>Math.abs(curPos)?1:-1;
    			correctPos*=-1; 
    			this.index = pos;
    			if(this.nav){for(var i=0;i<this.l;i++){this.nav[i].className = i==pos?this.c:''}}
    			this.u.posAnim = setInterval(function(){Hongru.slider.anim(correctPos,direction,a)},10);
    		},
    		
    		anim:function(des,dir,a){
    			var curPos=this.v?parseInt(this.u.style.top):parseInt(this.u.style.left);
    			if(curPos == des){
    				clearInterval(this.u.posAnim);
    				if(a||this.a){Hongru.slider.auto()}
    			}
    			else{
    				var v=curPos-Math.ceil(Math.abs(des-curPos)*.07)*dir+'px';
    				this.v?this.u.style.top=v:this.u.style.left=v;
    			}
    		},
    		
    		auto:function(){
    			this.u.auto=setInterval(function(){Hongru.slider.move(1,1)},this.a*1000)
    		},
    		
    		move:function(n,a){
    			var num=this.index+n, i=n==1?num==this.l?0:num:num<0?this.l-1:num; Hongru.slider.pos(i,a);
    		}
    	};
    }();
    
    

    最后还是提供源文件打包下载,感兴趣的同学可以下来看看,后面可能还会做淡入淡出或者其他过渡效果的焦点图。

    您可以点击这里下载

  • 相关阅读:
    PDO::prepare
    PDO::lastInsertId
    PDO::inTransaction
    PDO::getAvailableDrivers
    odu恢复drop表--通过logmnr挖掘object_id
    rpmbuild 构建rpm包时报错解决 error: Installed (but unpackaged) file(s) found:
    mysql high availability 概述
    mysql学习------权限机制
    mysql学习------二进制日志
    pt-query-digest查询日志分析工具
  • 原文地址:https://www.cnblogs.com/hongru/p/1833441.html
Copyright © 2011-2022 走看看