如何将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"开始转动 ...
随机推荐
- C# 动态创建类,动态创建表,支持多库的数据库维护方案
1.创建表 SqlSugar支持了3种模式的建表,非常的灵活,可以MYSQL MSSQL ORACLE等用同一语法创建数据库,不需要考虑数据库的兼容性 中间标准: string 大文本 5.1.3. ...
- SpringBoot集成海康网络设备SDK
目录 SDK介绍 概述 功能 下载 对接指南 集成 初始化项目 初始化SDK 初始化SDK概述 新建AppRunner 新建SdkInitService 新建InitSdkTask 新建 HCNetS ...
- 为什么wait()需要在同步代码块内使用
我们还是通过源代码和代码注释来学习这个问题 我们先来看看wait方法的注释,这里截取最根源的native方法给的注释 Causes the current thread to wait until e ...
- do { } while(){ }
1 var j=10; 2 do{ 3 console.log("十八岁以下禁止观看") 4 console.log(j); 5 j++; //j为18之前都不执行while 6 ...
- 【开源免费】ChatGPT-Java版SDK重磅更新至1.0.10版,支持Tokens计算,快来一键接入。
简介 ChatGPT Java版SDK开源地址:https://github.com/Grt1228/chatgpt-java ,目前收获将近1000个star. 有bug欢迎朋友们指出,互相学习,所 ...
- Vulnhub Bravery靶机 Walkthrough
Bravery Recon 使用netdiscover对本地网络进行arp扫描. ┌──(kali㉿kali)-[~] └─$ sudo netdiscover -r 192.168.80.0/24 ...
- 在 Rainbond 上使用在线知识库系统zyplayer-doc
zyplayer-doc 是一款适合企业和个人使用的WIKI知识库管理工具,提供在线化的知识库管理功能,专为私有化部署而设计,最大程度上保证企业或个人的数据安全,可以完全以内网的方式来部署使用它. 当 ...
- Yii2批量插入数据
方法一 yii2一次插入多行数据 /** * @inheritdoc 批量添加 * @params $add array 添加数据 */ public function add_all($add) ...
- HTML、 input;、accept 属性-规定能够通过文件上传进行提交的文件类型
定义和用法 文章地址: http://www.w3school.com.cn/tags/att_input_accept.asp accept 属性规定了可通过文件上传提交的服务器接受的文件类型. 注 ...
- Java并发(二)----初次使用多线程并行提高效率
1.并行 并行代表充分利用多核 cpu 的优势,提高运行效率. 想象下面的场景,执行 3 个计算,最后将计算结果汇总. 计算 1 花费 10 ms 计算 2 花费 11 ms 计算 3 花费 ...