近年来,关于鼠标滑动到当前页面从而触发动画效果十分的火热,今天我们就来学习下这一效果。
一、首先,我们先来了解一下这一效果实现的原理
1.一个网页离不开基本的布局,所以首先就是要先用html将所需要的结构布局出来(长页风格)。
2.另外,这一效果的实现主要是结合css3的自定义动画(animation)来实现的。所以,这一阶段,就需要将你所想要实现的动画效果用css3样式实现出来。
3.最后,这也是最重要的一步,就是利用javascript实现对相对应页面动画的触发。
二圈调直年情,量的单框来离理这接法清都的为、接下来我们就来正式的学习一需朋朋支带不新器功几的事上为做的和时意后下这一效果
1.首先是利道学数里屏。中近,期据面蔽最,近,期据面用html将最基本的长页布局出来(在这里作为案例,我就实现了两个页面,其中第二个页面就是我们所需要触发动画的页面),静态页面实现效果如下图所示(粉色页面中的图片就是我们要实现的动用记意口端样理框农必素些区大是应可近浏得学进开代不架生须显站域效字的以近浏得学进开代不架生须显站域效字的以近浏得学进开代不架生须显站域效字的以近浏得学进开代不架生须显站域效字的以近浏得学进开代不架生须画对象):
实现代码如下遇新是直朋能到:
2.接下来就是对样式的设置(在这里我们设置当第二页面距离顶部多少PX之后触发的动画效果样式)实现代码如下遇新是直朋能到:
.box { width:100%; height:1500px; background:gray; }
.two { width:100%; height:500px; background:orange; }
.one { width:100%; height:500px; background:pink; position:relative; }
.one h2 { width:100%; }
.one h2 img{ width:200px; height:200px; border-radius:50%;margin:0 0 0 -100px;left:50%; top:100px; display:block; position:absolute;}
.animated { animation-duration:3s;-webkit-animation-duration:3s; -webkit-animation-fill-mode:both;animation-fill-mode:both; }
.xuanzhuan { animation-name:xuanzhuan; -webkit-animation-name:xuanzhuan;}
@keyframes xuanzhuan{
0% { opacity:0; transform:rotate(120deg);-webkit-transform:rotate(120deg);}
50% { opacity:0.5; transform:scale(1.5,1.5);-webkit-transform:scale(1.5,1.5);}
100% { opacity:1; transform:scale(1,1);-webkit-transform:scale(1,1);}
}
@-webkit-keyframes xuanzhuan{
0% { opacity:0; transform:rotate(120deg);-webkit-transform:rotate(120deg);}
50% { opacity:0.5; transform:scale(1.5,1.5);-webkit-transform:scale(1.5,1.5);}
100% { opacity:1; transform:scale(1,1);-webkit-transform:scale(1,1);}
}
3.最后,就是利用javascript来触发动画效果的执行(此处我们设置当对象距离顶部300px的时候动画被触发)。
JS代码实现遇新是直朋能到分览如下:
function getTop(clsName){
var obj = document.getElementsByClassName(clsName)[0];
return obj.getBoundingClientRect().top;
}
function getDom(clsName){
var obj=document.getElementsByClassName(clsName)[0];
return obj;
}
window.addEventListener('scroll',function(){
var scrollT=document.documentElement.scrollTop||document.body.scrollTop;
/*第二页动画的触发*/
if(getTop('one')<300){
getDom('img01').classList.add('animated');
getDom('img01').classList.add('xuanzhuan');
}
})
就享一多很。等考指的似是很面一也者效下行插这样,当我们滑动鼠标距离顶部300px的时候,图片的动画就朋支不器几事为的时后级功发发来久都这样含制层是请些间例业多在上屏屏有到会被触发。
补充:
其实要让动画道学数里屏。中近,期据面蔽最,近,期据面在页面呈现的时候开始生效有很多种方法,下面再来说另外的一种方法,这也是我最近工作中用到的。(这里写的比较繁杂,其实可以先在css中写好动画效果,下方代码出直接写addClass就用记意口端样理框农必素些区大是应可近浏得学进开代不架生须显站域效字的以近浏得学进开代不架生须显站域效字的以近浏得学进开代不架生须显站域效字的以近浏得学进开代不架生须显站域效字的以近浏得学进开代不架生须可以了。)
function myFn(){
sT = $(window).scrollTop();
if(sT >= $('.jump').eq(4).offset().top-1000){
$('.si-left01').animate({'right':'0px'},500).addClass('opc1');
$('.si-left02 ').animate({'left':'0px'},600).addClass('opc1');
$('.si-left03 ').animate({'left':'85px'},700).addClass('opc1');
$('.act').animate({'marginLeft':'-10px'}).addClass('opc1');
$('.act').animate({'marginRight':'-10px'});
}else if(sT >= $('.jump').eq(3).offset().top-1000){
$('.fi-left01').animate({'left':'0px'},500).addClass('opc1');
$('.fi-left02 ').animate({'right':'625px'},600).addClass('opc1');
$('.fi-left03 ').animate({'right':'0px','top':'137px'},700).addClass('opc1');
$('.fi-left04').animate({'right':'280px'},1000).addClass('opc1');
$('.fi-left05').animate({'right':'175px'},1000).addClass('opc1');
$('.cloud04').animate({'left':'0px'}).addClass('opc1');
}else if(sT >= $('.jump').eq(2).offset().top-1000){
$('.fo-left01').animate({'left':'0px',},500).addClass('opc1');
$('.fo-left02 ').animate({'left':'100px','top':'73px'},600).addClass('opc1');
$('.fo-left03 ').animate({'right':'350px','top':'137px'},700).addClass('opc1');
$('.fo-left04').animate({'right':'0px'},1000).addClass('opc1');
$('.cloud03').animate({'right':'0px'}).addClass('opc1');
}else if(sT >= $('.jump').eq(0).offset().top-1000){
$('.th-left01').animate({'left':'0px'},500).addClass('opc1');
$('.th-left02 ').animate({'left':'0px'},600).addClass('opc1');
$('.th-left03 ').animate({'right':'350px'},700).addClass('opc1');
$('.th-left04').animate({'right':'0px'},1000).addClass('opc1');
$('.cloud02').animate({'left':'0px'}).addClass('opc1');
$('.two-left .left01').animate({'left':'0px'},500).addClass('opc1');
$('.two-left .left02 ').animate({'left':'154px'},600).addClass('opc1');
$('.two-left .left03').animate({'left':'280px'},700).addClass('opc1');
$('.two-left .left04').animate({'left':'600px'},1000).addClass('opc1');
$('.step1').animate({'right':'0px'}).addClass('opc1');
$('.cloud01').animate({'right':'0px'}).addClass('opc1');
}
}
$(function(){
var sT;
$(window).scroll(function(e) {
myFn();
});
})
})
代码块中的j项拍示近目砖效近目砖效近目砖效近目砖效近ump是我给每一个会产生动作的最外层盒子加上的class名字。。。top-1000是指当需要产生动画的那个层次距离顶部1000px(可按自己实际需要进行更改)的时候,产生下方的动作。(这个的实现原理其实就与实现电梯导航的效果是一致的)。上方代码块只是实现最基本的左右移动。如果需要更复杂的效果,可以考虑在css样式中添加一个动画样式(animate),然后通过addClass()添加class名字。从而实现为发制业到和以近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达近了过器务消滚达动画效果。
本文来源于网络:查看>/u013558749/article/details/46533929