jquery动画2.元素坐标动画效果(创建一个图片走廊)

  效果预览图片:

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