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

(0)

相关推荐

  • jquery中获得元素尺寸和坐标的方法整理

    一.获得坐标 1.offset() offset() 方法返回或设置匹配元素相对于文档的偏移(位置).(即视口坐标) 该方法返回的对象包含两个整型属性:top 和 left,以像素计. 此方法只对可见元素有效. 2.position() position() 方法返回匹配元素相对于父元素的位置(偏移).(相对于父元素的文档坐标) 该方法返回的对象包含两个整型属性:top 和 left,以像素计. 此方法只对可见元素有效. 3.offsetParent() offsetParent() 方法返回最

  • jquery用offset()方法获得元素的xy坐标

    获取页面某一元素的绝对X,Y坐标,可以用offset()方法:(body属性设置margin :0;padding:0;) var X = $('#DivID').offset().top; var Y = $('#DivID').offset().left; 获取相对(父元素)位置: var X = $('#DivID').position().top; var Y = $('#DivID').position().left;

  • jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标

    获取页面某一元素的绝对X,Y坐标,可以用offset()方法: 复制代码 代码如下: <span style="color:#000066; font-weight:bold">var</span> X <span style="color:#339933">=</span> $<span style="color:#009900">(</span><span styl

  • jQuery获得指定元素坐标的方法

    本文实例讲述了jQuery获得指定元素坐标的方法.分享给大家供大家参考.具体分析如下: var left = $("#div").offset().left; //div相当于窗口的左边的偏移量 var top = $("#div").offset().top; //相当于窗口的顶部的偏移量 希望本文所述对大家的jQuery程序设计有所帮助.

  • jquery获得页面元素的坐标值实现思路及代码

    jquery如何获得页面元素的坐标值 yulutxt是输入经典语录的输入框,feedBackMessage函数见http://www.wesoho.com/article/asp/2765.htm 复制代码 代码如下: var p = $("#yulutxt"); var yuluoffset = p.offset(); feedBackMessage(msg,yuluoffset.left+p.width()+10,yuluoffset.top,5000); ------------

  • 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="

  • js jquery获取当前元素的兄弟级 上一个 下一个元素

    var chils= s.childNodes;  //得到s的全部子节点 var par=s.parentNode;   //得到s的父节点 var ns=s.nextSbiling;   //获得s的下一个兄弟节点 var ps=s.previousSbiling;  //得到s的上一个兄弟节点 var fc=s.firstChild;   //获得s的第一个子节点 var lc=s.lastChile;   //获得s的最后一个子节点 JS获取节点父级,子级元素 先说一下JS的获取方法,其

  • jQuery淡入淡出元素让其效果更为生动

    为了达到更为生动的效果,可以把一个元素淡出或淡入,在任何一种情况下,都只是随着时间来改变元素的透明度.jQuery提供了3个和淡入淡出相关的函数: ·fadeIn()使得一个隐藏的元素淡入视野.首先,元素占据的空间出现在页面上(这可能意味着页面上的其他元素要移走):然后,元素逐渐地变得可见.如果元素在页面上已经可见,则这个函数没有任何效果.如果没有提供一个速度值,元素使用"常规"设置来淡入(400毫秒). ·fadeOut()通过使得一个可视的元素像幽灵般地淡出视线来隐藏它.如果元素在

  • Android动画系列之帧动画和补间动画的示例代码

    Android 提供三种动画:帧动画.补间动画和属性动画,本篇文章介绍帧动画以及补间动画的使用,属性动画的使用将在后面的文章中分享,那就来复习一下这两种动画的使用吧. FrameAnimation FrameAnimation 即逐帧动画,通俗来说就是按照图片动作顺序依次播放来形成动画,创建 FrameAnimation 可用 xml 定义也可直接使用代码创建. xml创建帧动画 在 res/drawable 文件夹下创建一个 drawable 文件,使用 animation-list 标签,具

  • 通过JS动态创建一个html DOM元素并显示

    近日,因工作需要,需要通过点击某个元素后, 动态创建一个DOM元素并显示,因此写了一些相关的JS函数,在此记录,以作备忘: /**//* 动态创建DOM元素的相关函数支持 www.jcodecraeer.com */ /**//* 获取以某个元素的DOM对象 @obj 该元素的ID字符串 */ function getElement(obj) { return typeof obj=='string'?document.getElementById(obj):obj; } /**//* 获取某个

  • jQuery插件pagewalkthrough实现引导页效果

    现在很多网站不仅是介绍,更多的是有一些功能,怎么样让客户快速的知道网站有哪些功能呢?这里pagewalkthrough.js插件能帮我们实现,它是一个轻量级的jQuery插件,它可以帮助我们创建一个遮罩引导层,实现页面功能引导功能,引导完成显示页面内容. html代码: <div id="walkthrough-content"> <div id="walkthrough-1"> <h3>欢迎来到网页引导示例DEMO演示页<

  • 详解用 python-docx 创建浮动图片

    相信大家对python-docx这个常用的操作docx文档的库都不陌生,它支持以内联形状(Inline Shape)的形式插入图片,即图片和文本之间没有重叠,遵循流动版式(flow layout).但是,截至最新的0.8.10版本,python-docx尚不支持插入浮动图片(floating picture).这显然不能满足丰富多彩的文档样式的需要,因此本文探究基于python-docx插入浮动图片--剖析xml.追踪源码,最后得到完整代码. 问题提出 作者在尝试实现PDF文档转docx(pdf

  • jQuery框架实现元素显示及隐藏三种动画方式

    目录 一.默认方式显示和隐藏 二.滑动方式显示和隐藏 三.淡入淡出方式显示和隐藏 四.案例:广告的自动显示和隐藏 本文分享自华为云社区<jQuery框架实现元素显示及隐藏动画[附案例分析]>,原文作者:灰小猿. 首先来看一个简单的动画效果图: ​ 我之前也和小伙伴们讲过使用jQuery框架可以很好的对html中元素的属性等进行操作,所以上面显示和隐藏的也只是一个div,而并不是一个图片.下面我就来和小伙伴们讲一个如何对元素的属性进行操作,使其显示或者隐藏! 在jQuery框架中对元素对象进行显

  • jQuery生成假加载动画效果

    在使用PDFObject.js时,由于后台需要转换数据,在前台显示的时候,有很长一段时间显示空白页面,所以想到写一个假的加载动画 script片段: <script type="text/javascript"> var bar = 0; var line = "||" ; var amount ="||" ; function count(){ bar= bar+2 ; amount =amount + line; $("

随机推荐