需要实现的效果

样式分析:

2个主要部分,头部的标题和导航部分,和主要的功能实现区域;

1.头部

    <div id="header">
<h1>动漫视频</h1>
<span><</span>
<span>></span>
</div>
<div id="tips">
<span class="on"> </span>
<span> </span>
<span> </span>
</div>

2.功能区域

    <div id="viewBox">
<ul id="contentBox">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
<li>11</li>
<li>12</li>
</ul>
</div>

添加样式

    <style>
#header{
display: inline-block;
}
#header h1{
display: inline-block;
font-size: 32px;
padding-left: 20px;
}
#header span{
width: 30px;
height: 30px;
display: inline-block;
font-size: 23px;
cursor:pointer;
border: 1px solid #eee;
border-radius: 3px;
text-align: center;
}
#header span:hover{
background: #333;
color: #fff;
} #viewBox{
width: 960px;
height: 140px;
font-size: 0;
overflow: hidden;
border: 1px solid #333;
}
#contentBox{
width: 2880px;
position: relative;
}
#contentBox>li{
width: 200px;
height: 100px;
background: pink;
display: inline-block;
font-size: 12px;
margin: 20px;
}
#tips{
display: inline-block;
}
#tips span{
display: inline-block;
width: 20px;
height: 20px;
border-radius: 20px;
text-align: center;
line-height: 20px;
border: 1px solid #eee;
cursor: pointer;
}
#tips span:hover{
background: #999;
color: white;
}
#tips span.on{
background: black;
color: white;
}
</style>

此处需要注意,因为需要给 contentBox 添加 animate left 方法,所以需要给它的 position : related 才能使 animate left 生效

功能分析:

1.下一页

2.当下一页滚动到最后一页面,再点击下一页的时候,需要返回到第一页

3.上一页

4.当上一页滚动到第一页,再点击上一页的时候,需要前进到最后一页

5.当点击圆圈的时候,前进到任意一页

功能实现

首先,我们在接下来的功能中常用的一些元素,先赋值给变量

$vBox = $('#viewBox');                          /* 可以见到的展示区域 */
$cBox = $('#contentBox'); /* 内容区域 */
vWidth = $vBox.width(); /* 可见区域的宽度 */
cWidth = $cBox.width(); /* 内容区域的宽度 */

然后,我们有5个小功能,下一页(goNext),回到顶部(goTop),上一页(goBack),回到底部(goBotoom),到任意页(goPage)

1.下一页(goNext)

var vLeft=$cBox.position().left;                //内容区域距左侧的距离
$cBox.animate({left: '-='+vWidth+'px'});

2.回到顶部(goTop)

var vLeft=$cBox.position().left;
$cBox.animate({left: 0});

3.上一页(goBack)

var vLeft=$cBox.position().left;                //内容区域距左侧的距离
$cBox.animate({left: '+='+vWidth+'px'});

4.回到底部(goBotoom)

var vLeft=$cBox.position().left;                //内容区域距左侧的距离
$cBox.animate({left: -cWidth+vWidth});

5.到任意页(goPage)

var vLeft=$cBox.position().left;                //内容区域距左侧的距离
$cBox.animate({left: -vWidth*page}); //传递一个page参数用来知道需要跳转到第几页

当每个小功能实现后,组合下功能,并绑定功能

var $vBox;
var $cBox;
var vWidth;
var cWidth;
$(function () {
$vBox = $('#viewBox');
$cBox = $('#contentBox');
vWidth = $vBox.width();
cWidth = $cBox.width(); $('#header span:last-child').click(function () {
go('next');
})
$('#header span:nth-child(2)').click(function () {
go('back');
}) $('#tips>span').click(function () {
var $ThisS=$(this);
$ThisS.addClass('on').siblings().removeClass();
go($ThisS.index());
}) }) function go(page) {
var vLeft=$cBox.position().left;
if (!$cBox.is(':animated')){
switch (page){
case 'next':
if( vLeft > -cWidth-vLeft ){
$cBox.animate({left: '-='+vWidth+'px'});
}else{
go('top');
}
break; case 'back':
if( vLeft < 0){
$cBox.animate({left: '+='+vWidth+'px'});
}else{
go('bottom');
}
break; case 'top':
$cBox.animate({left: 0});
break; case 'bottom':
$cBox.animate({left: -cWidth+vWidth});
break; default:
$cBox.animate({left: -vWidth*page});
break;
}
}
}

下面是全部代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第一个页面</title>
<!--<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">-->
<script src="common/js/jquery-2.1.1.min.js"></script>
<!--<script src="common/js/screenAdaptation.js"></script>-->
<script src="js/download.js"></script>
<script src="js/stopXBack.js"></script>
<link rel="stylesheet" href="common/css/common-style.css?v=<%=Math.random()*100 %>">
<link rel="stylesheet" href="css/download.css?v=<%=Math.random()*100 %>">
<style>
#header{
display: inline-block;
}
#header h1{
display: inline-block;
font-size: 32px;
padding-left: 20px;
}
#header span{
width: 30px;
height: 30px;
display: inline-block;
font-size: 23px;
cursor:pointer;
border: 1px solid #eee;
border-radius: 3px;
text-align: center;
}
#header span:hover{
background: #333;
color: #fff;
} #viewBox{
width: 960px;
height: 140px;
font-size: 0;
overflow: hidden;
border: 1px solid #333;
}
#contentBox{
width: 2880px;
position: relative;
}
#contentBox>li{
width: 200px;
height: 100px;
background: pink;
display: inline-block;
font-size: 12px;
margin: 20px;
}
#tips{
display: inline-block;
}
#tips span{
display: inline-block;
width: 20px;
height: 20px;
border-radius: 20px;
text-align: center;
line-height: 20px;
border: 1px solid #eee;
cursor: pointer;
}
#tips span:hover{
background: #999;
color: white;
}
#tips span.on{
background: black;
color: white;
}
</style>
<script>
var $vBox;
var $cBox;
var vWidth;
var cWidth;
$(function () {
$vBox = $('#viewBox');
$cBox = $('#contentBox');
vWidth = $vBox.width();
cWidth = $cBox.width(); $('#header span:last-child').click(function () {
go('next');
})
$('#header span:nth-child(2)').click(function () {
go('back');
}) $('#tips>span').click(function () {
var $ThisS=$(this);
$ThisS.addClass('on').siblings().removeClass();
go($ThisS.index());
}) }) function go(page) {
var vLeft=$cBox.position().left;
if (!$cBox.is(':animated')){
switch (page){
case 'next':
if( vLeft > -cWidth-vLeft ){
$cBox.animate({left: '-='+vWidth+'px'});
}else{
go('top');
}
break; case 'back':
if( vLeft < 0){
$cBox.animate({left: '+='+vWidth+'px'});
}else{
go('bottom');
}
break; case 'top':
$cBox.animate({left: 0});
break; case 'bottom':
$cBox.animate({left: -cWidth+vWidth});
break; default:
$cBox.animate({left: -vWidth*page});
break;
}
}
} </script>
</head>
<body>
<div id="header">
<h1>动漫视频</h1>
<span><</span>
<span>></span>
</div>
<div id="tips">
<span class="on"> </span>
<span> </span>
<span> </span>
</div>
<div id="viewBox">
<ul id="contentBox">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
<li>11</li>
<li>12</li>
</ul>
</div>
</body>
</html>

【jQuery学习日记】jQuery实现滚动动画的更多相关文章

  1. jquery学习笔记---jquery插件开发

    http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html jquery插件开发:http://www.cnblogs.com/damonla ...

  2. (高级篇)jQuery学习之jQuery Ajax用法详解

    jQuery Ajax在web应用开发中很常用,它主要包括有ajax,get,post,load,getscript等等这几种常用无刷新操作方法,下面我来给各位同学介绍介绍. 我们先从最简单的方法看起 ...

  3. JQuery学习笔记---jquery对象和DOM对象的关系

    1.DOM(Document  Object Model,文档对象模型).DOM树 { html (head&&body),  head(meta && title) ...

  4. jQuery学习之jQuery Ajax用法详解

    jQuery Ajax在web应用开发中很常用,它主要包括有ajax,get,post,load,getscript等等这几种常用无刷新操作方法,下面我来给各位同学介绍介绍. 我们先从最简单的方法看起 ...

  5. jquery学习笔记----jquery相关的文档

    http://tool.oschina.net/apidocs/apidoc?api=jquery http://www.w3school.com.cn/jquery/jquery_ref_event ...

  6. jQuery学习之jQuery Ajax用法详解(转)

    [导读] jQuery Ajax在web应用开发中很常用,它主要包括有ajax,get,post,load,getscript等等这几种常用无刷新操作方法,下面我来给各位同学介绍介绍.我们先从最简单的 ...

  7. jQuery学习之jQuery Ajax用法详解(转)

    jQuery Ajax在web应用开发中很常用,它主要包括有ajax,get,post,load,getscript等等这几种常用无刷新操作方法,下面我来给各位同学介绍介绍. 我们先从最简单的方法看起 ...

  8. jquery 学习日记之选择器

    看完Jquery选择器的教程视频后,对jquery的选择器有一定的认识和了解,现整理一下知识: 一.jquery基本选择器,这类比较简单,一笔带过. #id 选择器,是选择  匹配id值中的第一个元素 ...

  9. 【转载】【JQuery学习】jQuery插件开发

    JQuery做得最好的就是他的闭包和扩展性.超级简单的扩展方法,让更多的人可以轻松的开发定制自己的jQuery插件.下面的东西是转载过来当做学习材料的.虽然貌似有点古老,但是jQuery的变更一直都不 ...

随机推荐

  1. js 判断元素的display是否为block或者none

    if($(this).css("display")=="none"){ //隐藏的 }else{ //显示的 }

  2. sequelize 应用hook 实现对分表的访问

    https://github.com/cclient/sequelize-shardinghttps://www.npmjs.com/package/sequelize-sharding 实际有效的代 ...

  3. 动态指定log4net日志文件名称

    如果是希望日志文件按常见的日期格式动态命名,没什么好说的,直接修改app.config <param name="DatePattern" value="yyyyM ...

  4. BZOJ 2318: Spoj4060 game with probability Problem (概率dp)(博弈论)

    2318: Spoj4060 game with probability Problem Description Alice和Bob在玩一个游戏.有n个石子在这里,Alice和Bob轮流投掷硬币,如果 ...

  5. java 变量分类

    转:https://blog.csdn.net/suneqing/article/details/37909811 1.按被声明的位置划分 局部变量:方法和语句块内定义的的变量.(在定义局部变量时,必 ...

  6. C++类和对象到底是什么意思?

    C++ 是一门面向对象的编程语言,理解 C++,首先要理解类(Class)和对象(Object)这两个概念. C++ 中的类(Class)可以看做C语言中结构体(Struct)的升级版.结构体是一种构 ...

  7. Redis为什么会比MySQL快?

    1.Redis是基于内存存储的,MySQL是基于磁盘存储的 2.Redis存储的是k-v格式的数据.时间复杂度是O(1),常数阶,而MySQL引擎的底层实现是B+Tree,时间复杂度是O(logn), ...

  8. SVN 常用资源

    常用命令 将文档checkout到本地目录 svn checkout path(path是服务器上的目录) svn checkout svn://192.168.1.1/pro/domain svn ...

  9. Jenkins+jmeter设置定时执行任务

    1.准备好你的jmeter脚本 2.测试命令行下脚本执行 1)cd进入脚本目录 2)dir命令查看该目录下的脚本文件 3)jmeter -n -t test.jmx -l result.jtl  命令 ...

  10. Jmeter之CSV文件读取

    注意execl表生成的CSV文件的文件编码是GB2312和分隔符就好了