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代码:






   
    七夕主题
   
   
   
   
   
   
   
 
  




   


       

               
               

  •                
                   

                       

                       

                       

                   

                   
                   

                       

                       

                   

                   
                   

               

  •            
               

  •                
                   

                   

                   
                   

                       

                           

                           

                       

                       
                       

                   

                   
                   

               

  •            
               

  •                
                   

                       

                       

                       
                   
                   

                   
                   

                   

                       

                           

                           

                           

                           

                       

                   

                   
                   

                         

    •                    

    •                    

    •                    

    •                    

    •                    

    •                

                   
                   
               

  •        

       
       

       
       

   





pageA.css代码:


/*背景图*/


.a_background {
    width: 100%;
    height: 100%;
    position: absolute;
}


.a_background_top{
    width: 100%;
    height: 71.6%;
    background-image: url("http://img.mukewang.com/55addf6900019d8f14410645.png");
    background-size: 100% 100%;
}




.a_background_middle{
    width: 100%;
    height: 13.1%;
    background-image: url("http://img.mukewang.com/55addf800001ff2e14410118.png");
    background-size: 100% 100%;
}




.a_background_botton{
    width: 100%;
    height: 15.3%;
    background-image: url("http://img.mukewang.com/55addfcb000189b314410138.png");
    background-size: 100% 100%;
}


pageB.css代码:

/*背景图*/


.b_background {
    width: 100%;
    height: 100%;
    background-image: url("http://img.mukewang.com/55ade06f00015a0d14410901.png");
    background-size: 100% 100%;
    position: absolute;
}


.b_background_preload {
    background: url("http://img.mukewang.com/55ade0be0001a37914410901.png") no-repeat -9999px -9999px;
}


.lamp-bright {
   background-image: url("http://img.mukewang.com/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(http://img.mukewang.com/55ade1140001050d00910231.png);
    background-size: 100% 100%;
}


.door-right {
    left: 50%;
    background: url(http://img.mukewang.com/55ade12100019f5b00910231.png);
    background-size: 100% 100%;
}




/*鸟*/


.bird {
    min-width: 91px;
    min-height: 71px;
    top: 10%;
    position: absolute;
    z-index: 10;
    right: -91px;
    background: url(http://img.mukewang.com/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代码如下;






   
    慕课七夕主题
   
   
   
   





   


       

               

  •                

                       

                       

                       

                   

               

  •            
  • 页面2

  •            
  • 页面3

  •        

       

   

   




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;
}

你可能感兴趣的:(前端学习笔记)