1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > html5+css+js实现动画特效 人物动画

html5+css+js实现动画特效 人物动画

时间:2024-03-20 23:03:31

相关推荐

html5+css+js实现动画特效 人物动画

BoyWalk.js文件:

/**

* 小孩走路

* @param {[type]} container [description]

*/

function BoyWalk() {

var container = $("#content");

// 页面可视区域

var visualWidth = container.width();

var visualHeight = container.height();

// 获取数据

var getValue = function(className) {

var $elem = $('' + className + '');

// 走路的路线坐标

return {

height: $elem.height(),

top: $elem.position().top

};

}

// 路的Y轴

var pathY = function() {

var data = getValue('.a_background_middle');

return data.top + data.height / 2;

}();

var $boy = $("#boy");

var boyWidth = $boy.width();

var boyHeight = $boy.height();

// 设置下高度

$boy.css({

top: pathY - boyHeight + 25

})

// 暂停走路

function pauseWalk() {

$boy.addClass('pauseWalk');

}

// 恢复走路

function restoreWalk() {

$boy.removeClass('pauseWalk');

}

// css3的动作变化

function slowWalk() {

$boy.addClass('slowWalk');

}

// 用transition做运动

function stratRun(options, runTime) {

var dfdPlay = $.Deferred();

// 恢复走路

restoreWalk();

// 运动的属性

$boy.transition(

options,

runTime,

'linear',

function() {

dfdPlay.resolve(); // 动画完成

});

return dfdPlay;

}

// 开始走路

function walkRun(time, dist, disY) {

time = time || 3000;

// 脚动作

slowWalk();

// 开始走路

var d1 = stratRun({

'left': dist + 'px',

'top': disY ? disY : undefined

}, time);

return d1;

}

// 计算移动距离

function calculateDist(direction, proportion) {

return (direction == "x" ?

visualWidth : visualHeight) * proportion;

}

return {

// 开始走路

walkTo: function(time, proportionX, proportionY) {

var distX = calculateDist('x', proportionX)

var distY = calculateDist('y', proportionY)

return walkRun(time, distX, distY);

},

// 停止走路

stopWalk: function() {

pauseWalk();

},

setColoer:function(value){

$boy.css('background-color',value)

}

}

}

index.html代码:

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-type" content="text/html; charset=utf-8" />

<title>七夕主题</title>

<link rel='stylesheet' href='/down/55c16d94000109f300000000.css' />

<link rel='stylesheet' href='/down/55c16dab0001286100000000.css' />

<link rel='stylesheet' href='/down/55c16dc00001fa1a00000000.css' />

<link rel='stylesheet' href='/down/55c16dda0001113100000000.css' />

<script type="text/javascript" src="/down/55ac9a860001a6c500000000.js"></script>

<script type="text/javascript" src="/down/55ac9ea30001ace700000000.js"></script>

<script type="text/javascript" src="/down/55c16c910001e21b00000000.js"></script>

</head>

<body>

<div id='content'>

<ul class='content-wrap'>

<!-- 第一副画面 -->

<li>

<!-- 背景图 -->

<div class="a_background">

<div class="a_background_top"></div>

<div class="a_background_middle"></div>

<div class="a_background_botton"></div>

</div>

<!-- 云 -->

<div class="cloudArea">

<div class="cloud cloud1"></div>

<div class="cloud cloud2"></div>

</div>

<!-- 太阳 -->

<div id="sun"></div>

</li>

<!-- 第二副画面 -->

<li>

<!-- 背景图 -->

<div class="b_background"></div>

<div class="b_background_preload"></div>

<!-- 商店 -->

<div class="shop">

<div class="door">

<div class="door-left"></div>

<div class="door-right"></div>

</div>

<!-- 灯 -->

<div class="lamp"></div>

</div>

<!-- 鸟 -->

<div class="bird"></div>

</li>

<!-- 第三副画面 -->

<li>

<!-- 背景图 -->

<div class="c_background">

<div class="c_background_top"></div>

<div class="c_background_middle"></div>

<div class="c_background_botton"></div>

</div>

<!-- 小女孩 -->

<div class="girl"></div>

<div class="bridge-bottom">

<div class="water">

<div id="water1" class="water_1"></div>

<div id="water2" class="water_2"></div>

<div id="water3" class="water_3"></div>

<div id="water4" class="water_4"></div>

</div>

</div>

<!-- 星星 -->

<ul class="stars">

<li class="stars1"></li>

<li class="stars2"></li>

<li class="stars3"></li>

<li class="stars4"></li>

<li class="stars5"></li>

<li class="stars6"></li>

</ul>

<!-- 慕课网logo图 -->

<div class="logo"></div>

</li>

</ul>

<!-- 雪花 -->

<div id="snowflake"></div>

<!-- 小男孩 -->

<div id="boy" class="charector"></div>

</div>

</body>

</html>

pageA.css代码:

/*背景图*/

.a_background {

width: 100%;

height: 100%;

position: absolute;

}

.a_background_top{

width: 100%;

height: 71.6%;

background-image: url("/55addf6900019d8f14410645.png");

background-size: 100% 100%;

}

.a_background_middle{

width: 100%;

height: 13.1%;

background-image: url("/55addf800001ff2e14410118.png");

background-size: 100% 100%;

}

.a_background_botton{

width: 100%;

height: 15.3%;

background-image: url("/55addfcb000189b314410138.png");

background-size: 100% 100%;

}

pageB.css代码:

/*背景图*/

.b_background {

width: 100%;

height: 100%;

background-image: url("/55ade06f00015a0d14410901.png");

background-size: 100% 100%;

position: absolute;

}

.b_background_preload {

background: url("/55ade0be0001a37914410901.png") no-repeat -9999px -9999px;

}

.lamp-bright {

background-image: url("/55ade0be0001a37914410901.png");

}

/*商店*/

.shop {

width: 39.5%;

height: 35.5%;

position: absolute;

left: 29%;

top: 36.5%;

}

.door {

position: absolute;

width: 32%;

height: 100%;

top: 32%;

height: 68%;

overflow: hidden;

left: 58.5%;

}

.door-left,

.door-right {

width: 50%;

height: 100%;

position: absolute;

}

.door-left {

left: 0%;

background: url(/55ade1140001050d00910231.png);

background-size: 100% 100%;

}

.door-right {

left: 50%;

background: url(/55ade12100019f5b00910231.png);

background-size: 100% 100%;

}

/*鸟*/

.bird {

min-width: 91px;

min-height: 71px;

top: 10%;

position: absolute;

z-index: 10;

right: -91px;

background: url(/55ade1700001b38302730071.png) -182px 0px no-repeat;

}

.birdFly {

-webkit-animation-name: bird-slow;

-webkit-animation-duration: 400ms;

-webkit-animation-timing-function: step-start;

-webkit-animation-iteration-count: infinite;

-moz-animation-name: bird-slow;

-moz-animation-duration: 400ms;

-moz-animation-timing-function: step-start;

-moz-animation-iteration-count: infinite;

}

/*鸟慢飞*/

@-webkit-keyframes bird-slow {

0% {

background-position: -182px 0px;

}

50% {

background-position: 0px 0px;

}

75% {

background-position: -91px 0px;

}

100% {

background-position: -182px 0px;

}

}

@-moz-keyframes bird-slow {

0% {

background-position: -182px 0px;

}

50% {

background-position: 0px 0px;

}

75% {

background-position: -91px 0px;

}

100% {

background-position: -182px 0px;

}

}

pageC.css代码如下;

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-type" content="text/html; charset=utf-8" />

<title>慕课七夕主题</title>

<link rel='stylesheet' href='style.css' />

<link rel='stylesheet' href='pageA.css' />

<script src="/jquery/1.9.1/jquery.js"></script>

<script type="text/javascript" src="Swipe.js"></script>

</head>

<style type="text/css">

.charector {

width: 151px;

height: 291px;

left: 6%;

top: 55%;

position: absolute;

background: url(/55ade248000198ae10550582.png) -0px -291px no-repeat;

}

</style>

<body>

<div id='content'>

<ul class='content-wrap'>

<li>

<div class="a_background">

<div class="a_background_top"></div>

<div class="a_background_middle"></div>

<div class="a_background_botton"></div>

</div>

</li>

<li> 页面2 </li>

<li> 页面3 </li>

</ul>

<div id="boy" class="charector"></div>

</div>

<script type="text/javascript">

var swipe = Swipe($("#content"));

var $boy = $("#boy");

// 设置一下缩放比例与基点位置

var proportion = $(document).width() / 1440;

// 设置元素缩放

$boy.css({

transform: 'scale(' + proportion + ')'

});

// 获取数据

var getValue = function(className) {

var $elem = $('' + className + '');

// 走路的路线坐标

return {

height: $elem.height(),

top: $elem.position().top

};

}

// 路的中间到顶部的距离

var pathY = function() {

var data = getValue('.a_background_middle');

return data.top + data.height / 2;

}();

// 获取人物元素布局尺寸

var boyHeight = $boy.height();

var boyWidth = $boy.width();

// 计算下缩放后的元素与实际尺寸的一个距离

var boyInsideLeft = (boyWidth - (boyWidth*proportion))/2;

var boyInsideTop = (boyHeight - (boyHeight*proportion))/2;

// 修正小男孩的正确位置

// 中间路的垂直距离 - 人物原始的垂直距离 - 人物缩放后的垂直距离

$boy.css({

top: pathY - (boyHeight * proportion) - boyInsideTop

});

</script>

</body>

</html>

Qixi.js代码如下:

// 动画结束事件

var animationEnd = (function() {

var explorer = navigator.userAgent;

if (~explorer.indexOf('WebKit')) {

return 'webkitAnimationEnd';

}

return 'animationend';

})();

///

//灯动画 //

///

var lamp = {

elem: $('.b_background'),

bright: function() {

this.elem.addClass('lamp-bright');

},

dark: function() {

this.elem.removeClass('lamp-bright');

}

};

var container = $("#content");

var swipe = Swipe(container);

visualWidth = container.width();

visualHeight = container.height();

// 页面滚动到指定的位置

function scrollTo(time, proportionX) {

var distX = visualWidth * proportionX;

swipe.scrollTo(distX, time);

}

// 获取数据

var getValue = function(className) {

var $elem = $('' + className + '');

//走路的路线坐标

return {

height: $elem.height(),

top: $elem.position().top

};

};

// 桥的Y轴

var bridgeY = function() {

var data = getValue('.c_background_middle');

return data.top;

}();

//小女孩 //

var girl = {

elem: $('.girl'),

getHeight: function() {

return this.elem.height();

},

setOffset: function() {

this.elem.css({

left: visualWidth / 2,

top: bridgeY - this.getHeight()

});

}

};

// 修正小女孩位置

girl.setOffset();

// 用来临时调整页面

swipe.scrollTo(visualWidth * 2, 0);

function doorAction(left, right, time) {

var $door = $('.door');

var doorLeft = $('.door-left');

var doorRight = $('.door-right');

var defer = $.Deferred();

var count = 2;

// 等待开门完成

var complete = function() {

if (count == 1) {

defer.resolve();

return;

}

count--;

}

doorLeft.transition({

'left': left

}, time, complete);

doorRight.transition({

'left': right

}, time, complete);

return defer;

}

// 开门

function openDoor() {

return doorAction('-50%', '100%', 2000);

}

// 关门

function shutDoor() {

return doorAction('0%', '50%', 2000);

}

/**

* 小孩走路

* @param {[type]} container [description]

*/

function BoyWalk() {

var container = $("#content");

// 页面可视区域

var visualWidth = container.width();

var visualHeight = container.height();

// 获取数据

var getValue = function(className) {

var $elem = $('' + className + '');

// 走路的路线坐标

return {

height: $elem.height(),

top: $elem.position().top

};

};

// 路的Y轴

var pathY = function() {

var data = getValue('.a_background_middle');

return data.top + data.height / 2;

}();

var $boy = $("#boy");

var boyWidth = $boy.width();

var boyHeight = $boy.height();

// 设置下高度

$boy.css({

top: pathY - boyHeight + 25

});

// 暂停走路

function pauseWalk() {

$boy.addClass('pauseWalk');

}

// 恢复走路

function restoreWalk() {

$boy.removeClass('pauseWalk');

}

// css3的动作变化

function slowWalk() {

$boy.addClass('slowWalk');

}

// 用transition做运动

function stratRun(options, runTime) {

var dfdPlay = $.Deferred();

// 恢复走路

restoreWalk();

// 运动的属性

$boy.transition(

options,

runTime,

'linear',

function() {

dfdPlay.resolve(); // 动画完成

});

return dfdPlay;

}

// 开始走路

function walkRun(time, dist, disY) {

time = time || 3000;

// 脚动作

slowWalk();

// 开始走路

var d1 = stratRun({

'left': dist + 'px',

'top': disY ? disY : undefined

}, time);

return d1;

}

// 走进商店

function walkToShop(runTime) {

var defer = $.Deferred();

var doorObj = $('.door');

// 门的坐标

var offsetDoor = doorObj.offset();

var doorOffsetLeft = offsetDoor.left;

var doorOffsetTop = offsetDoor.top;

// 小孩当前的坐标

var posBoy = $boy.position();

var boyPoxLeft = posBoy.left;

var boyPoxTop = posBoy.top;

// 中间位置

var boyMiddle = $boy.width() / 2;

var doorMiddle = doorObj.width() / 2;

var doorTopMiddle = doorObj.height() / 2;

// 当前需要移动的坐标

instanceX = (doorOffsetLeft + doorMiddle) - (boyPoxLeft + boyMiddle);

// Y的坐标

// top = 人物底部的top - 门中见的top值

instanceY = boyPoxTop + boyHeight - doorOffsetTop + (doorTopMiddle);

// 开始走路

var walkPlay = stratRun({

transform: 'translateX(' + instanceX + 'px),translateY(-' + instanceY + 'px),scale(0.5,0.5)',

opacity: 0.1

}, 2000);

// 走路完毕

walkPlay.done(function() {

$boy.css({

opacity: 0

});

defer.resolve();

});

return defer;

}

// 走出店

function walkOutShop(runTime) {

var defer = $.Deferred();

restoreWalk();

// 开始走路

var walkPlay = stratRun({

transform: 'translateX(' + instanceX + 'px),translateY(0),scale(1,1)',

opacity: 1

}, runTime);

// 走路完毕

walkPlay.done(function() {

defer.resolve();

});

return defer;

}

// 计算移动距离

function calculateDist(direction, proportion) {

return (direction == "x" ?

visualWidth : visualHeight) * proportion;

}

return {

// 开始走路

walkTo: function(time, proportionX, proportionY) {

var distX = calculateDist('x', proportionX);

var distY = calculateDist('y', proportionY);

return walkRun(time, distX, distY);

},

// 走进商店

toShop: function() {

return walkToShop.apply(null, arguments);

},

// 走出商店

outShop: function() {

return walkOutShop.apply(null, arguments);

},

// 停止走路

stopWalk: function() {

pauseWalk();

},

setColoer: function(value) {

$boy.css('background-color', value)

},

// 获取男孩的宽度

getWidth: function() {

return $boy.width();

},

// 复位初始状态

resetOriginal: function() {

this.stopWalk();

// 恢复图片

$boy.removeClass('slowWalk slowFlolerWalk').addClass('boyOriginal');

},

// 转身动作

rotate: function(callback) {

restoreWalk();

$boy.addClass('boy-rotate');

// 监听转身完毕

if (callback) {

$boy.on(animationEnd, function() {

callback();

$(this).off();

});

}

},

// 取花

talkFlower: function() {

$boy.addClass('slowFlolerWalk');

}

}

}

style.css代码如下:

* {

padding: 0;

margin: 0;

}

ol,

ul,

li {

list-style-type: none;

}

/*主体部分*/

#content {

width: 100%;

height: 100%;

/*top: 20%;*/

overflow: hidden;

position: absolute;

}

.content-wrap {

position: relative;

}

.content-wrap > li {

background: #CAE1FF;

color: red;

float: left;

overflow: hidden;

position: relative;

}

li:nth-child(2) {

background: #9BCD9B;

}

li:nth-child(3) {

background: yellow;

}

a {

position: absolute;

top: 50%;

left: 40%;

}

Swipe.js代码如下::

/

//页面滑动 //

/

/**

* [Swipe description]

* @param {[type]} container [页面容器节点]

* @param {[type]} options [参数]

*/

function Swipe(container) {

// 获取第一个子节点

var element = container.find(":first");

var swipe = {};

// li页面数量

var slides = element.find(">");

// 获取容器尺寸

var width = container.width();

var height = container.height();

// 设置li页面总宽度

element.css({

width: (slides.length * width) + 'px',

height: height + 'px'

});

// 设置每一个页面li的宽度

$.each(slides, function(index) {

var slide = slides.eq(index); // 获取到每一个li元素

slide.css({

width: width + 'px',

height: height + 'px'

});

});

// 监控完成与移动

swipe.scrollTo = function(x, speed) {

// 执行动画移动

element.css({

'transition-timing-function' : 'linear',

'transition-duration' : speed + 'ms',

'transform' : 'translate3d(-' + x + 'px,0px,0px)'

});

return this;

};

return swipe;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。