jquery动画2.元素坐标动画效果(创建一个图片走廊) |
本文标签:元素坐标 效果预览图片: ![]() 大家可以下载demo看完整效果,下面介绍制作过程 。 1.首先创建一个html页面,html结构如下: 复制代码 代码如下: <div id="slider"> <div id="viewer"> <img id="image1" src="img/amstrad.jpg" alt="Amstrad CPC 472" /> <img id="image2" src="img/atari.jpg" alt="Atari TT030" /> <img id="image3" src="img/commodore16.jpg" alt="Commodore 64" /> <img id="image4" src="img/commodore128.jpg" alt="Commodore 128" /> <img id="image5" src="img/spectrum.jpg" alt="Sinclair ZX Spectrum +2" /> </div> <ul id="ui"> <li class="hidden" id="prev"><a href="" title="Previous">«</a></li> <li><a href="#image1" title="Image 1" class="active">Image 1</a></li> <li><a href="#image2" title="Image 2">Image 2</a></li> <li><a href="#image3" title="Image 3">Image 3</a></li> <li><a href="#image4" title="Image 4">Image 4</a></li> <li><a href="#image5" title="Image 5">Image 5</a></li> <li class="hidden" id="next"><a href="" title="Next">»</a></li> </ul> </div> 大家一看就明白,viewer包含了几张图片,ul对象里面包含了‘上一条、‘下一条和各个图片对应的导航 。 2.接下来需要为这些html元素设置css样式,css我就不多说了,就是给viewer、图片等元素加样式,viewer同时只能显示一张图片: 复制代码 代码如下: #slider { width: 500px; position: relative; } #viewer { width: 400px; height: 300px; margin: auto; position: relative; overflow: hidden; } #slider ul { width: 350px; margin: 0 auto; padding: 0; list-style-type: none; } #slider ul:after { content: "."; visibility: hidden; display: block; height: 0; clear: both; } #slider li { margin-right: 10px; float: left; } #prev, #next { position: absolute; top: 175px; } #prev { left: 20px; } #next { position: absolute; right: 10px; } .hidden { display: none; } #slide { width: 2000px; height: 300px; position: absolute; top: 0; left: 0; } #slide img { float: left; width: 400px; height: 300px; } #title { margin: 0; text-align: center; } 3.为页面添加jquery和jquery.easing.1.3.js的引用 。然后就是我们这篇的重头了,为导航编写相应的js事件 。 首先我们需要创建一个新的div来包装5张图片 。 复制代码 代码如下: $(#viewer).wrapInner(<div id="slide"></div>); 接下来我们使用jquery的selector找到slider,slide,prev,next等对象,把他们存到相应的js变量中 。 复制代码 代码如下: var container = $(#slider), prev = container.find(#prev), prevChild = prev.find(a), next = container.find(#next).removeClass(hidden), nextChild = next.find(a), slide = container.find(#slide) 创建两个新的js变量,key保存当前活动图片id,details保存所有图片各自的position和title信息 。 复制代码 代码如下: key = "image1", details = { image1: { position: 0, title: slide.children().eq(0).attr(alt) }, image2: { position: -400, title: slide.children().eq(1).attr(alt) }, image3: { position: -800, title: slide.children().eq(2).attr(alt) }, image4: { position: -1200, title: slide.children().eq(3).attr(alt) }, image5: { position: -1600, title: slide.children().eq(4).attr(alt) } }; 为了显示图片标题,我们需要添加一个h2标题到页面 。 复制代码 代码如下: $(<h2>, { id: title, text: details[key].title }).prependTo(#slider); 上述工作完成后,就可以开始为a标签添加click事件了,这里的a标签分两种,一种是‘上一条和‘下一条,另外一种是各图片对应的导航 。我们需要分别为他们添加相应的click事件 。但是他们都会使用到一个相同的回调函数,我们先完成回调函数的编写 。代码思路我就直接以注释的方式完成 。 复制代码 代码如下: function postAnim(dir) { //首先我们获取到当前活动图片的id,只包含数字部分 var keyMath = parseInt(key.match(/\d+$/)); //slide的left小于0,也就是说当前活动图片不是图片1,‘上一条导航显示;否则‘上一条导航消失 (parseInt(slide.css(left)) < 0) ? prev.show() : prev.hide(); //slide的left等于-1600,也就是说当前活动图片是第五章,‘下一条导航消失,否则‘下一条导航显示 (parseInt(slide.css(left)) === -1600) ? next.hide() : next.show(); //if条件语句当使用‘上一条和‘下一条导航时才有意义 。实现的功能就是点‘上一条是key减一,点‘下一条key加1 if (dir) { var titleKey = (dir === back) ? keyMath - 1 : keyMath + 1; key = image + titleKey; } //重新设置h2标题 container.find(#title).text(details[key].title); //重新设置当前哪个图片为活动状态 container.find(.active).removeClass(active); container.find(a[href=# + key + ]).addClass(active); } 接下来我们完成‘上一条和‘下一条导航的功能 。 复制代码 代码如下: nextChild.add(prevChild).click(function (e) { //阻止默认事件,否则动画效果就没有了 e.preventDefault(); var arrow = $(this).parent(); //当前slide没有动画时,我们才添加新的动画效果 if (!slide.is(:animated)) { slide.animate({ left: (arrow.attr(id) === prev) ? +=400 : -=400 }, slow, easeOutBack, function () { (arrow.attr("id") === "prev") ? postAnim("back") : postAnim("forward"); }); } }); 最后是图片对应的各自导航的功能实现 。 复制代码 代码如下: $(#ui li a).not(prevChild).not(nextChild).click(function (e) { //阻止默认事件 e.preventDefault(); //获取当前活动图片id key = $(this).attr(href).split(#)[1]; //设置动画效果 slide.animate({ left: details[key].position }, slow, easeOutBack, postAnim); }); 本课的内容完毕了,大家可以下载demo,查看功能具体是如下实现的 。 demo下载地址:jQuery.animation.position |