如何将jq动画做出高帧的感觉?(丝滑顺畅)
前言
我最近在一点一点研究我 博客园 的前端代码,算是边敲边学吧,还算是挺有意思的。
是这样的,之前见过一个效果,就是先显示博客的背景,然后博客主界面缓缓的上升到正确位置,于是乎,干他!开撸代码!

各位来自五湖四海的大帅哥小姐姐懂我的意思就行啊哈哈,原谅我是个灵魂画手
实现过程
到这可能有的人说,jQuery里面不是有slideUp和slideDown方法吗?兄台,且听我慢慢道来~
slideUp():
slideUp() 方法以滑动方式隐藏被选元素。
注意:隐藏的元素不会被完全显示(不再影响页面的布局)。
注意关键词!以滑动的方式隐藏被选元素!
我刚开始没看到,直接用上,效果吓哭我这个弱鸡了,主体界面直接没了!
来,上个demo,诶?老夫的demo呢?马上来!为了代码能简洁,css写成了内联样式
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>滑动上升demo</title>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<style type="text/css">
/*body背景图*/
body {
/*设置背景图片*/
background: rgba(12, 100, 129, 1) url('https://img2020.cnblogs.com/blog/1916157/202003/1916157-20200320155023660-1382835829.png') fixed no-repeat;
background-size: cover;/*完全覆盖整个body*/
}
/*页面主体*/
#home {
margin: 0 auto;/*实现布局居中*/
width: 80%;/*原始65*/
background-color: rgba(245, 245, 245, 0.7);/*背景颜色*/
padding: 30px;/*内边距*/
margin-top: 200px;/*上边外延边距*/
margin-bottom: 50px;/*下边外延边距*/
box-shadow: 0 2px 6px rgba(100, 100, 100, 0.3);/*阴影效果*/
border-radius:30px/*圆角化*/;
}
</style>
</head>
<body>
<div id="home"></div>
<script type="text/javascript">
$("#home").css("margin-top",window.innerHeight);//将页面主体放到刚好屏幕下方一点的位置
$("#home").slideUp(3000);
</script>
</body>
</html>
由于gif展示效果太差,大家可以复制这段html代码去看下嘿嘿
slideDown():
slideDown() 方法以滑动方式显示被选元素。
注意:slideDown() 适用于通过 jQuery 方法隐藏的元素,或在 CSS 中声明 display:none 隐藏的元素(不适用于通过 visibility:hidden 隐藏的元素)。
诶诶?这个方法似乎也不错,但是就是从上到下滑动出现的,似乎有点卡顿(可能因为我电脑关系吧,但此处是为了讲我的高帧方法,啊哈哈不好不好)
将上面代码中的javascript的部分替换为以下两行代码就行啦
$("#home").css("display","none");
$("#home").slideDown(3000);

重头戏来了

我们来重写一个方法来实现这个效果,不要怕,让我一点点的给你分析
这个上升滑动动画的实质就是margin-top值的改变,至于为什么,就不过多细讲啦,相信大家都知道(其实是因为我讲不清,有兴趣的同学可以搜下css盒子模型)
动画其实就是一帧一帧的画面,那么我们让它的margin-top每秒减少一定的值就能实现了

But!但是这个值究竟怎么控制才最为完美呢?
我们先来粗略尝试一下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>滑动上升demo</title>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<style type="text/css">
/*body背景图*/
body {
/*设置背景图片*/
background: rgba(12, 100, 129, 1) url('https://img2020.cnblogs.com/blog/1916157/202003/1916157-20200320155023660-1382835829.png') fixed no-repeat;
background-size: cover;/*完全覆盖整个body*/
}
/*页面主体*/
#home {
margin: 0 auto;/*实现布局居中*/
width: 80%;/*原始65*/
background-color: rgba(245, 245, 245, 0.7);/*背景颜色*/
padding: 30px;/*内边距*/
margin-top: 200px;/*上边外延边距*/
margin-bottom: 50px;/*下边外延边距*/
box-shadow: 0 2px 6px rgba(100, 100, 100, 0.3);/*阴影效果*/
border-radius:30px/*圆角化*/;
}
</style>
</head>
<body>
<div id="home"></div>
<script type="text/javascript">
$("#home").css("margin-top",window.innerHeight);//将页面藏到屏幕下方一点
function Up(){
$("#home").css("margin-top",parseInt($("#home").css("margin-top"))-50);
console.log($("#home").css("margin-top"));
if(parseInt($("#home").css("margin-top"))==207){//这个207是我计算出来的,因为我屏幕的高度是657,所以会减少到这个值
clearInterval(id);
alert("停止");
}
}
var id = setInterval("Up()",1000);
</script>
</body>
</html>
大家试一试上面的代码,感觉效果很差,很卡,有没有!
这个代码的意思是每一秒上升50个像素,所以看起来一卡一卡的,跳太多了!

那么我们怎么实现高帧的效果呢?简单粗暴点,先来个60帧试试水
众所周知,动画的制作原理是利用了人眼的视觉暂留效应,好吧我们粗暴点,直接上原理。
60帧意思就是每秒刷新60次,
1s=1000ms
那么1000/60≈17,也就是说17ms刷新一次,就是60帧了!
我们还是将上面代码中的javascript的代码替换为以下几行就行了!
$("#home").css("margin-top",window.innerHeight);//将页面藏到屏幕下方一点
function Up(){
$("#home").css("margin-top",parseInt($("#home").css("margin-top"))-2);
console.log($("#home").css("margin-top"));
if(parseInt($("#home").css("margin-top"))<210){//这个210是我计算出来的合适位置
clearInterval(id);
alert("停止");
}
}
var id = setInterval("Up()",17);
大家可以复制去感觉以下!!!简直不要太丝滑!!!
同理你也可以实现90帧,120帧等等...
建议帧数越高,改变的数字差值小一点。
如果能够帮到你,或者学到点东西,请给我点赞哦!
你的点赞就是对我最大的鼓励!

如何将jq动画做出高帧的感觉?(丝滑顺畅)的更多相关文章
- 丝滑顺畅:使用CSS3获取60FPS动画
原文链接: Smooth as Butter: Achieving 60 FPS Animations with CSS3 在移动端使用动画元素是很容易的. 如果你能遵循我们的这里的提示, 在移动端适 ...
- JS/jQ常用宽高及应用
关于js的宽高,随便一搜就是一大堆.这个一大堆对我来说可不是什么好事,看的头都大了.所以今天就总结了一些比较会常用的,并说明一下应用场景. 先来扯一下documentElement和body的微妙关系 ...
- (21)jq动画
jq动画的优点 优点: 1.可以知道动画结束的表示(结束的回调函数) 2.可以利用jq动画插件完成复杂的动画 动画有三个参数:动画的样式是字典.动画持续的事件,动画结束回调函数 <!DOCTYP ...
- css动画和jq动画的简单区分
有很多不怎么用css3写动画的同学经常会对其中css3的transform,transition,translate,animation,@keyframes等等动画属性混淆错乱,经常使用了发现没有效 ...
- spine 所有动画的第一帧必须把所有能K的都K上
spine 所有动画的第一帧必须把所有能K的都K上.否则在快速切换动画时会出问题.
- 高仿QQ6.0側滑菜单之滑动优化(二)
好了,昨天已经实现了高仿QQ6.0的側滑大致框架.如有兴趣.能够去看下仿QQ6.0側滑之ViewDragHelper的使用(一) 可是之前的实现.仅仅是简单的能够显示和隐藏左側的菜单,可是特别生硬,并 ...
- Android系统编程入门系列之界面Activity响应丝滑的传统动画
上篇文章介绍了应用程序内对用户操作响应的相关方法位置,简单的响应逻辑可以是从一个界面Activity跳转到另一个界面Activity,也可以是某些视图View的相对变化.然而不管是启动一个界面执行新界 ...
- Android 学习笔记多媒体技术之 Drawable类+Tween(补间动画)+Frame(帧动画)
学习内容: 1.了解Drawable类的作用 2.如何使用Drawable... 3.了解Tween动画... 4.如何创建和使用Tween动画... 1.Drawable类... Drawabl ...
- 【CSS3】动画animation-关键帧keyframes
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- jq动画设置图片抽奖(修改效果版)
效果:点击开始,图片转动,按钮显示"停止",点击停止,选出中奖号码,,最后一个数字停止时,按钮变为"again",点击"again"开始转动 ...
随机推荐
- 关于js通过修改行内样式来修改元素样式
关于js通过修改行内样式来修改元素样式 1.当我们通过使用js来修改html元素的样式时,使用的方法是为元素添加行内样式, 此时的js样式是生效的,因为行内样式优先级高于类名 2.如果已有同属性的行内 ...
- 为什么 C# 可能是最好的第一编程语言
纵观神州大地,漫游中华互联网,我看到很多人关注为什么你应该开始学习JavaScript做前端,而对blazor这样的面向未来的框架有种莫名的瞧不起,或者为什么你应该学习Python作为你的第一门编程语 ...
- fpm模式下读取到is_cli为何为true
目录 问题出现和简单排查 排查 经过思考和猜测,严重怀疑是fpm读取到了cli下的opcache 原起 粗浅探索 测试代码 opcache配置 共享内存缓存与文件缓存 php-fpm下读取到is_cl ...
- Gateway 网关
Spring Cloud Gateway 作为 Spring Cloud框架的第二代网关,在功能上要比 Zuul更加的强大,性能也更好.随着 Spring Cloud的版本迭代,Spring Clou ...
- Oracle_表空间
Oracle 表空间 在执行具体的操作之前,由于Oracle不允许删除现有临时表空间,所以在删除现有临时表空间时要终止现有的实时会话. 查询Oracle表空间名称,表空间物理文件路径 查询临时表空间: ...
- 京东LBS推荐算法实践
作者:京东零售 郑书剑 1.推荐LBS业务介绍 1.1 业务场景 现有的同城购业务围绕京东即时零售能力搭建了到店.到家两种业务场景.同城业务与现有业务进行互补,利用高频,时效性快的特点,可以有效提升主 ...
- .Net Core后端架构实战【2-实现动态路由与Dynamic API】
摘要:基于.NET Core 7.0WebApi后端架构实战[2-实现动态路由与Dynamic API] 2023/02/22, ASP.NET Core 7.0, VS2022 引言 使用过ABP ...
- day64:Linux:nginx模块之限制连接&状态监控&Location/用nginx+php跑项目/扩展应用节点
目录 1.nginx模块:限制连接 limit_conn 2.nginx模块:状态监控 stub_status 3.nginx模块:Location 4.用nginx+php跑wordpress项目 ...
- VMware另一个程序锁定文件的一部分,进程无法访问
问题描述:搭建RAC11g,在做共享磁盘的时候,节点2要共享节点1的磁盘,但是有一个问题,节点2关机之后,再打开,是有一个访问节点1的磁盘的过程,如果访问失败,就会开不了机器 rac1加的三个磁盘: ...
- Java中「Future」接口详解
目录 一.背景 二.Future接口 1.入门案例 2.Future接口 三.CompletableFuture类 1.基础说明 2.核心方法 2.1 实例方法 2.2 计算方法 2.3 结果获取方法 ...