鼠标滑动到当前页面触发动画效果
来源:互联网 发布:薛进文 饶子和 知乎 编辑:程序博客网 时间:2024/06/06 01:12
近年来,关于鼠标滑动到当前页面从而触发动画效果十分的火热,今天我们就来学习下这一效果。
一、首先,我们先来了解一下这一效果实现的原理
1.一个网页离不开基本的布局,所以首先就是要先用html将所需要的结构布局出来(长页风格)。 2.另外,这一效果的实现主要是结合css3的自定义动画(animation)来实现的。所以,这一阶段,就需要将你所想要实现的动画效果用css3样式实现出来。 3.最后,这也是最重要的一步,就是利用javascript实现对相对应页面动画的触发。
二、接下来我们就来正式的学习一下这一效果
1.首先是利用html将最基本的长页布局出来(在这里作为案例,我就实现了两个页面,其中第二个页面就是我们所需要触发动画的页面),静态页面实现效果如下图所示(粉色页面中的图片就是我们要实现的动画对象):
实现代码如下:
<body><div class="box"> <div class="two"></div> <div class="one"> <h2><img class="img01" src="img/4.jpg" /></h2> </div></div></body>
2.接下来就是对样式的设置(在这里我们设置当第二页面距离顶部多少PX之后触发的动画效果样式<这里我们设置图片在被触发动画的时候放大并旋转了120度>)实现代码如下:
<style> * { margin:0; padding:0; }//reset css .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);} }</style>
3.最后,就是利用javascript来触发动画效果的执行(此处我们设置当对象距离顶部300px的时候动画被触发)。
JS代码实现如下:
<script> 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'); } })</script>
就这样,当我们滑动鼠标距离顶部300px的时候,图片的动画就会被触发。
补充:
其实要让动画在页面呈现的时候开始生效有很多种方法,下面再来说另外的一种方法,这也是我最近工作中用到的。(这里写的比较繁杂,其实可以先在css中写好动画效果,下方代码出直接写addClass就可以了。)
<script> $(function(){ 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(); }); }) })</script>
代码块中的jump是我给每一个会产生动作的最外层盒子加上的class名字。。。top-1000是指当需要产生动画的那个层次距离顶部1000px(可按自己实际需要进行更改)的时候,产生下方的动作。(这个的实现原理其实就与实现电梯导航的效果是一致的)。上方代码块只是实现最基本的左右移动。如果需要更复杂的效果,可以考虑在css样式中添加一个动画样式(animate),然后通过addClass()添加class名字。从而实现动画效果。
3 0
- 鼠标滑动到当前页面触发动画效果
- 原生js利用鼠标滚轮实现滚动到当前页面实现动画效果
- 页面滚动触发css动画效果
- 仿拉勾网动画效果-鼠标进入图片的方向滑动特效
- 鼠标滑动效果
- [Android实例] ViewPager多页面滑动切换以及动画效果
- ViewPager多页面滑动切换以及动画效果
- ViewPager多页面滑动切换以及动画效果
- [Android实例] ViewPager多页面滑动切换以及动画效果
- Android ViewPager多页面滑动切换以及动画效果
- Android ViewPager多页面滑动切换以及动画效果
- ViewPager多页面滑动切换以及动画效果
- ViewPager多页面滑动切换以及动画效果
- Android ViewPager多页面滑动切换以及动画效果
- ViewPager多页面滑动切换以及动画效果
- ViewPager多页面滑动切换以及动画效果
- [Android实例] ViewPager多页面滑动切换以及动画效果
- ViewPager多页面滑动切换以及动画效果(转)
- Opencv in iOS 1:Testing Canny of Basic FrameWork
- !!js中call、apply、bind的用法
- app如何混淆,打包,签名?
- centos6.x服务解释
- c#控件
- 鼠标滑动到当前页面触发动画效果
- 配置Eclipse支持java和xml文件的代码补全功能
- android 代码片段,实现60秒倒计时
- java反射 反射构造函数 报 wrong number of arguments 错误
- asp.net 返回上一页的实现方法小集
- mongodb mysql对比
- 《学习OpenCV》第三章课后题3
- Sublime下安装package control
- 发现一个很好的mac和android手机文件互传的工具