前言

我最近在一点一点研究我 博客园 的前端代码,算是边敲边学吧,还算是挺有意思的。

是这样的,之前见过一个效果,就是先显示博客的背景,然后博客主界面缓缓的上升到正确位置,于是乎,干他!开撸代码!

各位来自五湖四海的大帅哥小姐姐懂我的意思就行啊哈哈,原谅我是个灵魂画手

实现过程

到这可能有的人说,jQuery里面不是有slideUp和slideDown方法吗?兄台,且听我慢慢道来~

slideUp():

slideUp() 方法以滑动方式隐藏被选元素。

注意:隐藏的元素不会被完全显示(不再影响页面的布局)。

来自菜鸟教程jQuery 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动画做出高帧的感觉?(丝滑顺畅)的更多相关文章

  1. 丝滑顺畅:使用CSS3获取60FPS动画

    原文链接: Smooth as Butter: Achieving 60 FPS Animations with CSS3 在移动端使用动画元素是很容易的. 如果你能遵循我们的这里的提示, 在移动端适 ...

  2. JS/jQ常用宽高及应用

    关于js的宽高,随便一搜就是一大堆.这个一大堆对我来说可不是什么好事,看的头都大了.所以今天就总结了一些比较会常用的,并说明一下应用场景. 先来扯一下documentElement和body的微妙关系 ...

  3. (21)jq动画

    jq动画的优点 优点: 1.可以知道动画结束的表示(结束的回调函数) 2.可以利用jq动画插件完成复杂的动画 动画有三个参数:动画的样式是字典.动画持续的事件,动画结束回调函数 <!DOCTYP ...

  4. css动画和jq动画的简单区分

    有很多不怎么用css3写动画的同学经常会对其中css3的transform,transition,translate,animation,@keyframes等等动画属性混淆错乱,经常使用了发现没有效 ...

  5. spine 所有动画的第一帧必须把所有能K的都K上

    spine 所有动画的第一帧必须把所有能K的都K上.否则在快速切换动画时会出问题.

  6. 高仿QQ6.0側滑菜单之滑动优化(二)

    好了,昨天已经实现了高仿QQ6.0的側滑大致框架.如有兴趣.能够去看下仿QQ6.0側滑之ViewDragHelper的使用(一) 可是之前的实现.仅仅是简单的能够显示和隐藏左側的菜单,可是特别生硬,并 ...

  7. Android系统编程入门系列之界面Activity响应丝滑的传统动画

    上篇文章介绍了应用程序内对用户操作响应的相关方法位置,简单的响应逻辑可以是从一个界面Activity跳转到另一个界面Activity,也可以是某些视图View的相对变化.然而不管是启动一个界面执行新界 ...

  8. Android 学习笔记多媒体技术之 Drawable类+Tween(补间动画)+Frame(帧动画)

    学习内容: 1.了解Drawable类的作用 2.如何使用Drawable... 3.了解Tween动画... 4.如何创建和使用Tween动画... 1.Drawable类...   Drawabl ...

  9. 【CSS3】动画animation-关键帧keyframes

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. jq动画设置图片抽奖(修改效果版)

    效果:点击开始,图片转动,按钮显示"停止",点击停止,选出中奖号码,,最后一个数字停止时,按钮变为"again",点击"again"开始转动 ...

随机推荐

  1. Asp-Net-Core开发笔记:使用RateLimit中间件实现接口限流

    前言 最近一直在忙(2月份沉迷steam,3月开始工作各种忙),好久没更新博客了,不过也积累了一些,忙里偷闲记录一下. 这个需求是这样的,我之前做了个工单系统,现在要对登录.注册.发起工单这些功能做限 ...

  2. 【单元测试】Junit 4(六)--junit4测试优先级顺序

    ​ @FixMethodOrder的顺序也并不一定是方法在代码中定义的顺序,这与JVM的实现有关. ​ 我们在写JUnit测试用例时,有时候需要按照定义顺序执行我们的单元测试方法,比如如在测试数据库相 ...

  3. 疯一样的向自己发问 - 剖析lsm 索引原理

    疯一样的向自己发问 - 剖析lsm 索引原理 lsm简析 lsm 更像是一种设计索引的思想.它把数据分为两个部分,一部分放在内存里,一部分是存放在磁盘上,内存里面的数据检索方式可以利用红黑树,跳表这种 ...

  4. 近期调研和使用 zeromq 与 cppzmq 的一些问题

    关于message 消息分片 消息分片的发送 消息分片允许将多个消息封装成一条消息.在发送自定义协议数据时,我们经常需要在消息前"填充"一个包头.如下代码,在发送的时候加上 zmq ...

  5. 3分钟带你了解Hadoop是什么

    Hadoop是一种开源的分布式计算框架,它在Google的MapReduce论文发表后大受欢迎,并被广泛应用.Hadoop框架包括一个分布式文件系统(HDFS),它允许用户以分布式方式存储和管理大量数 ...

  6. SpringBoot的EnableCaching简述

    Spring Boot中的EnableCaching简述 spring boot中自带有数据缓存机制,主要通过其org.springframework.cache包下的各种类来实现. EnableCa ...

  7. [CTF]picoCTF-day1

    Lets Warm Up If I told you a word started with 0x70 in hexadecimal, what would it start with in ASCI ...

  8. 二进制安装Kubernetes,一键安装脚本

    背景,最近几天闲着研究Kubernetes,发现使用手动二进制安装会有些繁琐.经过突发奇想,就出现这个脚本. 声明,该脚本不及互联网上其他大佬的一件脚本,该脚本仅仅是突发奇想编写的,希望大佬不喜勿喷. ...

  9. [网络/Linux]处理安全报告/安全漏洞的一般流程与思路

    对近期工作中所经历的4次处理第三方网络安全公司的安全报告及其安全漏洞的经验做一点小结. 1 流程 Stage1 阅读/整理/分类:安全漏洞报告的安全漏洞 (目的:快速了解漏洞规模和分布) Stage2 ...

  10. [数据库/Linux]CentOS7安装MySQL Percona版(RPM方式)

    OS: CentOS7 (x86_64) MySQL: MySQL Percona 5.7.31-34 0 前置条件 已配置完成YUM源 已卸载先前可能安装的MySQL rpm -qa | grep ...