JS+CSS实现过渡特效


Posted in Javascript onJanuary 02, 2021

最近在玩一个叫Baba is you的游戏,很羡慕里面的一个转场特效,所以试着做了一下。主要使用了JS和CSS,特效主要是用CSS实现的。

JS+CSS实现过渡特效

HTML代码

<!DOCTYPE html>
<html lang="en" dir="ltr">
 <head>
 <meta charset="utf-8">
 <title>开始导航</title>
 <link rel="stylesheet" href="style.css" >
 </head>
 <body>
 <div class="text">
 <p><a id="bottom">点击进入</a></p>
 </div>
 </body>
 <script type="text/javascript">
//执行代码
window.onload=function(){
 var bottom=document.getElementById("bottom");
 bottom.onclick=function(){
 action();
 }
}
//获取网页长宽
var windowWidth=window.screen.width;
var windowHeight=window.screen.height;
function createSnow(){
  topblack();
  leftblack();
  bottomblack();
  rightblack();
 function topblack(){
  //随机创造1个div圆球
  var left_random=Math.random()*windowWidth;
  var top_random=Math.random()*50;
  var div=document.createElement('div');
  div.className='snow';
  //定义缩放转换
  div.style.transform='scale('+(Math.random()*3)+')'
  //定义随机位置,在顶部50像素之内
  div.style.left=left_random+'px';
  div.style.top=top_random+'px';
  //放在html外面,先用overflow:hidden隐藏掉
  div.style.marginTop="-250px";
  document.body.appendChild(div);
  }
  function leftblack(){
  var left_random=Math.random()*50;
  var top_random=Math.random()* windowHeight;
  var div=document.createElement('div');
  div.className='snow';
  div.style.transform='scale('+(Math.random()*2)+')'
  div.style.left= left_random+'px';
  div.style.top=top_random+'px';
  div.style.marginLeft="-250px";
  document.body.appendChild(div);
  }
  function bottomblack(){
  var left_random=Math.random()*windowWidth;
  var bottom_random=Math.random()*50;
  var div=document.createElement('div');
  div.className='snow';
  div.style.transform='scale('+(Math.random()*2)+')'
  div.style.left=left_random+'px';
  div.style.bottom=bottom_random+'px';
  div.style.marginBottom="-250px";
  document.body.appendChild(div);
  }
  function rightblack(){
  var right_random=Math.random()*50;
  var top_random=Math.random()* windowHeight;
  var div=document.createElement('div');
  div.className='snow';
  div.style.transform='scale('+(Math.random()*2)+')'
  div.style.right=right_random+'px';
  div.style.top=top_random+'px';
  div.style.marginRight="-250px";
  document.body.appendChild(div);
  }
 }
function setblack(){
 //各自创造100个圆球随机放在HTML顶部、底部、左右边,各自隐藏。
 for(var i=0;i<100;i++){
  createSnow()
 }
 }
//清除使用过后的云层与文字
function clearsnow(){
 var snow=document.querySelectorAll(".snow");
 var font=document.querySelector(".Fontarea");
 for(var i=0;i<snow.length;i++){
 document.body.removeChild(snow[i]);
 }
 document.body.removeChild(font);
}
//只是一个习惯,定义一个创建div的模板函数。你们可以用自己的方式。
function font(oCss){
 var oBox=document.createElement("p");
 oCss.parent.appendChild(oBox);
 oBox.innerHTML=oCss.p;
 oBox.className=oCss.c;
 return oBox;
}
function create(oCss){
 var oBox=document.createElement("div");
 oCss.parent.appendChild(oBox);
 oBox.style.width=oCss.w+"px";
 oBox.style.height=oCss.h+"px";
 oBox.style.position=oCss.p;
 oBox.style.left=oCss.l+"px";
 oBox.style.top=oCss.t+"px";
 oBox.style.backgroundSize="100%";
 return oBox;
}
//创建浮现的文字
function winthegame(){
var Fontarea=create({
   "w":500,
   "h":600,
   "p":"absolute",
   "parent":document.body,
   "l":"400",
   "t":"0"});
Fontarea.style.marginTop="200px";
Fontarea.className="Fontarea";
Fontarea.style.zIndex="31";
var titlep=font({ "parent":Fontarea,"p":"CONGRATULATION!","c":"font7"});
}
//执行创建云层与文字,封装起来是因为,如果文字出现多个不同的,就用不同的函数封装不同的场合。
function wintime(){
 winthegame();
 setblack();
}
//执行创建与清除,用setTimeout()来延迟清除。
function action(){
 wintime();
setTimeout(clearsnow,5000);
}
 </script>
</html>

css代码

body{
 background-size: 100%;
 overflow: hidden;
 background-color: #000;
}
.text{
 color: white;
 text-align: center;
 text-transform: uppercase;
 margin: 300px 0;
 font-size: 22px;
}
.text a{color:white;
 text-decoration:none;
 cursor: pointer;
  }
.snow{
 background: #15181f;
 position: absolute;
 width: 100px;
 height: 100px;
 border-radius: 50%;
 z-index: 30;
 animation: bganimation 5s 1;
}
.font7{
 color:white;
 text-align: center;
 font-size: 60px;
}
.Fontarea{
 opacity:0;
 animation: beganfont 4s 1;
}
@keyframes bganimation {
 0%{
 width: 100px;
 height: 100px;
 }
 50%{
 width: 500px;
 height: 500px;
 }
 100%{
 width: 100px;
 height: 100px;
 }
}
@keyframes beganfont {
 0%{
 opacity:0;
 }
 50%{
 opacity:1;
 }
 100%{
 opacity:0;
 }
}

这是效果图,点击文字会执行效果一次。

JS+CSS实现过渡特效

效果JS的解析都写在注释里了,CSS就是使用@keyframes来实现效果,也不是什么难懂的。
这种效果对于用于展示开场应该足够了,主要可以用来炫耀之类的,JS的代码或许比较粗糙,是从某个朋友的雪花特效那copy来改的。主要是用来做一个期末项目的,这个项目某些东西我以后也会慢慢总结的。
那么,就这样,可能我写的特效会跟别人的撞车,请多多包涵。如果感觉不是什么高大上的东西,也请多多包涵。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery 1.3.2以上版本中出现pareseerror错误的解决方法
Jan 11 Javascript
jQuery源码分析-01总体架构分析
Nov 14 Javascript
JSONP 跨域共享信息
Aug 16 Javascript
jQuery ajax调用WCF服务实例
Jul 16 Javascript
SyntaxHighlighter 3.0.83使用笔记
Jan 26 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
Sep 01 Javascript
移动端触摸滑动插件swiper使用方法详解
Aug 11 Javascript
Vue2.0 实现歌手列表滚动及右侧快速入口功能
Aug 08 Javascript
详解Next.js页面渲染的优化方案
Jan 27 Javascript
解决layui数据表格Date日期格式的回显Object的问题
Sep 19 Javascript
jQuery 隐藏/显示效果函数用法实例分析
May 20 jQuery
vue+高德地图实现地图搜索及点击定位操作
Sep 09 Javascript
jQuery实现全选按钮
Jan 01 #jQuery
vue实现登录功能
Dec 31 #Vue.js
vue 实现图片懒加载功能
Dec 31 #Vue.js
vue 动态创建组件的两种方法
Dec 31 #Vue.js
Vue 修改网站图标的方法
Dec 31 #Vue.js
利用 JavaScript 实现并发控制的示例代码
Dec 31 #Javascript
jquery自定义组件实例详解
Dec 31 #jQuery
You might like
php可应用于面包屑导航的迭代寻找家谱树实现方法
2015/02/02 PHP
CodeIgniter针对lighttpd服务器URL重写的方法
2015/06/10 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
浅谈Javascript事件模拟
2012/06/27 Javascript
jQuery元素选择器用法实例
2014/12/23 Javascript
JS输入用户名自动显示邮箱后缀列表的方法
2015/01/27 Javascript
JavaScript编写连连看小游戏
2015/07/07 Javascript
jquery实现表单获取短信验证码代码
2017/03/13 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
详解javascript中的babel到底是什么
2018/06/21 Javascript
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
使用JS实现导航切换时高亮显示的示例讲解
2018/08/22 Javascript
node.js使用redis储存session的方法
2018/09/26 Javascript
记录一次开发微信网页分享的步骤
2019/05/07 Javascript
基于javascript原生判断DOM是否加载完毕
2020/10/14 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
JavaScript实现通讯录功能
2020/12/27 Javascript
[00:58]2016年国际邀请赛勇士令状宣传片
2016/06/01 DOTA
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
python中利用xml.dom模块解析xml的方法教程
2017/05/24 Python
Python空间数据处理之GDAL读写遥感图像
2019/08/01 Python
Python单元测试模块doctest的具体使用
2020/02/10 Python
Tensorflow 模型转换 .pb convert to .lite实例
2020/02/12 Python
用python制作个视频下载器
2021/02/01 Python
销售工作人员的自我评价分享
2013/11/10 职场文书
2014镇党委班子对照检查材料思想汇报
2014/09/23 职场文书
计算机实训报告范文
2014/11/05 职场文书
校园新闻稿范文
2015/07/18 职场文书
消防安全主题班会
2015/08/12 职场文书
2019初中学生入团申请书
2019/06/27 职场文书
用Python简陋模拟n阶魔方
2021/04/17 Python
Html5生成验证码的示例代码
2021/05/10 Javascript
Mysql基础知识点汇总
2021/05/26 MySQL