比jQuery更简单的方式开发焦点图
myFocus从v2.0版本开始,它的API就变成了类似jQuery的模式,即以DOM类为对象,进行链式操作。同时,它也集成了很多方便开发焦点图的方法,让你开发一款焦点图变成一件很简单很惬意的事情。
开发之前,建议你先熟悉一下myFocus的开发者API,当然不熟悉也没关系,如果你有一定的jquery/JS基础,你一样可以看的很轻松。
一个简单的例子
下面以“mF_pconline”这个简单实用的风格作为讲解。
建议在开发一款焦点图的时候,先定义好它的html结构和css。由于“mF_pconline”是属于“标准风格”,所以它的html结构已经定义好了:
<div id="boxID"><!--焦点图盒子--> <div class="loading"><img src="img/loading.gif" alt="请稍候..." /></div><!--载入画面--> <div class="pic"><!--图片--> <ul> <li><a href="#"><img src="img/1.jpg" alt="标题1" /></a></li> </ul> </div> </div>
发现它只有图片“.pic”列表,并没有文字/按钮等html元素?Take it easy,myFocus会很方便的生成这些元素,不过为了配合css呈现最终的效果,我们可以先手工加上这些元素,删除loading层并在焦点图div加上对应的class(mF_pconline):
<div id="boxID" class="mF_pconline"><!--焦点图盒子--> <div class="pic"><!--图片--> <ul> <li><a href="#"><img src="img/1.jpg" alt="标题1" /></a></li> </ul> </div> <div class="txt"><!--文字--> <ul> <li><a href="#">标题1</a></li> </ul> </div> <div class="num"><!--按钮--> <ul> <li><a href="#">1</a></li> </ul> </div> </div>
接着定义好它的css:
/*=========mF_pconline========*/ .mF_pconline .pic li{width:100%;height:100%;overflow:hidden;position:absolute;top:0;left:0;} .mF_pconline .txt li{position:absolute;z-index:2;bottom:0;height:28px;line-height:28px;background:#DBDBDB;display:none;} .mF_pconline .txt li a{display:block;position:relative;z-index:1;color:#333;padding-left:10px;font-size:12px;font-weight:bold;text-decoration:none;}/*标题样式*/ .mF_pconline .num{position:absolute;z-index:3;bottom:5px;right:5px;}/*按钮样式*/ .mF_pconline .num li{float:left;} .mF_pconline .num li a{color:#333;float:left;margin-left:3px;width:15px;height:15px;line-height:15px;*line-height:14px;overflow:hidden;border:1px solid #AEC1CC;text-align:center;cursor:pointer;background:#fff;text-decoration:none;}
通过这步,我们大概可以在浏览器中看到它最终的静态效果了。到这里我们可以删除那些我们手工添加的html代码(即还原到上面第一个html结构),因为我们可以方便的用js生成。这里,才是真正coding的开始。
------------------------------------------JS Coding华丽分割线--------------------------------------------------
先为myFocus的pattern类扩展一个名叫“mF_pconline”的风格:
myFocus.pattern.extend({//扩展pattern类 'mF_pconline':function(settings,$){//函数带了2个参数“settings”和“$” //your code here... } });
默认的pattern扩展函数带了2个参数,一个是调用时的参数集(settings),另一个是全局变量myFocus($),当然你可以为它们取自己喜欢的名称,这看个人喜好了。
接下来,添加我们需要的html结构:
var $focus=$(settings);//获得焦点图盒子及它的参数,为什么变量带$前缀?因为它不是一般对象而是myFocus对象,可以用它很多自己的方法和属性(类似jQuery对象) var $picList=$focus.find('.pic li');//找到图片列表(为下一步图片渐变做准备) var $txtList=$focus.addListTxt().find('li');//添加文字列表并用$txtList变量存起来 var $numList=$focus.addListNum().find('li');//同上,添加按钮列表并存起来
在一些焦点图中,因为它的高和宽是可变的,所以相对应的css也是动态的,本例也有一个动态的css属性:焦点图的总高度,它等于设置的高度加上标题的高度。
//CSS var txtH=settings.txtHeight; $focus[0].style.height=settings.height+txtH+'px';//同jQuery对象类似,myFocus对象也是一个数组,直接索引([0])可以得到对应的DOM对象
当html和css一切就绪后,我们便可以轮播了,它的方法是play:
//PLAY $focus.play(function(i){//上一帧,参数i为它的索引值 $picList[i].style.display='none';//对应图片消失 $txtList[i].style.display='none';//对应文字消失 $numList[i].className='';//对应按钮去掉class },function(i){//下一帧(当前帧),参数i为它的索引值 $picList.eq(i).fadeIn();//对应图片淡入 $txtList[i].style.display='block';//对应文字显示 $numList[i].className='current';//对应按钮加class });
最后一步,加上按钮控制:
//Control $focus.bindControl($numList);//为按钮列($numList)加上控制事件
最终的代码:
myFocus.pattern.extend({ 'mF_pconline':function(settings,$){ var $focus=$(settings); var $picList=$focus.find('.pic li'); var $txtList=$focus.addListTxt().find('li'); var $numList=$focus.addListNum().find('li'); //CSS var txtH=settings.txtHeight; $focus[0].style.height=settings.height+txtH+'px'; //PLAY $focus.play(function(i){ $picList[i].style.display='none'; $txtList[i].style.display='none'; $numList[i].className=''; },function(i){ $picList.eq(i).fadeIn(); $txtList[i].style.display='block'; $numList[i].className='current'; }); //Control $focus.bindControl($numList); } });
最后说下,其实demo中每款风格都是一个很好的实例,值得开发者学习借鉴。如果你在开发焦点图过程中遇到问题困惑,欢迎给我来信讨论。