这个鼠标点击出现爱心的特效经常在别的博客里见到,于是我查了度娘后拿来直接用上了。

虽然不知道原作者是谁,但肯定是个大神,只有通过观摩他/她的代码膜拜一下啦。

直接上代码(解析在代码注释里):

// 自执行匿名函数
(function(window, document, undefined) { // 传入window,document对象
var hearts = []; // 定义全局变量hearts,值为空数组 // 定义不同浏览器下的requestAnimationFrame函数实现,如果都没有,则用setTimeout实现
window.requestAnimationFrame = (function() {
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback) {
setTimeout(callback, 1000 / 60);
}
})(); init(); // 执行初始化函数 // 定义初始化函数
function init() {
css(".heart{z-index:100000000;width: 10px;height: 10px;position: fixed;background: #f00;transform: rotate(45deg);-webkit-transform: rotate(45deg);-moz-transform: rotate(45deg);}.heart:after,.heart:before{content: '';width: inherit;height: inherit;background: inherit;border-radius: 50%;-webkit-border-radius: 50%;-moz-border-radius: 50%;position: absolute;}.heart:after{top: -5px;}.heart:before{left: -5px;}"); // 定义要生成的爱心的样式
attachEvent(); // 添加点击事件(爱心生成)
gameloop(); // 开始循环移除爱心(内含递归)
} // 定义循环函数移除生成的爱心
function gameloop() {
for(var i = 0; i < hearts.length; i++) { // 循环hearts数组
if(hearts[i].alpha <= 0) { // 如果当前循环的heart对象的透明度为0或小于0
document.body.removeChild(hearts[i].el); // 从body对象中移除当前循环的heart对象(通过指针)
hearts.splice(i, 1); // 从heart数组中移除当前循环的heart对象(通过下标)
continue; // 跳过当前循环,进入下一个循环
}
hearts[i].y--; // y轴自减1
hearts[i].scale += 0.004; // 缩放增加0.004
hearts[i].alpha -= 0.013; // 透明度减少0.013
hearts[i].el.style.cssText = "left:" + hearts[i].x + "px;top:" + hearts[i].y + "px;opacity:" + hearts[i].alpha + ";transform:scale(" + hearts[i].scale + "," + hearts[i].scale + ") rotate(45deg);background:" + hearts[i].color;
}
requestAnimationFrame(gameloop); // 定时器定时执行,递归
} // 定义点击事件函数
function attachEvent() {
var old = typeof window.onclick === "function" && window.onclick;
window.onclick = function(event) {
old && old();
createHeart(event);
}
} // 定义创建爱心函数
function createHeart(event) {
var d = document.createElement("div"); // 创建一个div对象并赋值给变量d
d.className = "heart"; // 给div对象添加类名
hearts.push({ // 给hearts数组添加heart对象
el: d, // div对象
x: event.clientX - 5, // 鼠标当前位置x轴 - 5
y: event.clientY - 5, // 鼠标当前位置y轴 - 5
scale: 1, // 缩放
alpha: 1, // 透明度
color: randomColor() // 颜色(随机颜色)
});
document.body.appendChild(d); // 添加创建的div对象到body对象
} // 定义生成样式函数
function css(css) {
var style = document.createElement("style"); // 创建一个style对象并赋值给变量style
style.type = "text/css"; // 给style对象添加属性并赋属性值
try {
style.appendChild(document.createTextNode(css));
} catch(ex) {
style.styleSheet.cssText = css;
}
document.getElementsByTagName('head')[0].appendChild(style); // 添加创建的style对象到head对象
} // 定义生成随机颜色函数
function randomColor() {
return "rgb(" + (~~(Math.random() * 255)) + "," + (~~(Math.random() * 255)) + "," + (~~(Math.random() * 255)) + ")";
}
})(window, document);

我就是没有特效,缺特效,自己写特效,也不用别人写的特效!

嘿嘿,真香。

"能伤害我的,都是我爱的。"

javascript博客爱心特效代码与代码解析的更多相关文章

  1. HelloDjango 第 09 篇:让博客支持 Markdown 语法和代码高亮

    作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 为了让博客文章具有良好的排版,显示更加丰富的格式,我们使用 Markdown 语法来书 ...

  2. [技术博客]React Native——HTML页面代码高亮&数学公式解析

    问题起源 原有博文显示时代码无法高亮,白底黑字的视觉效果不好. 原有博文中无法解析数学公式,导致页面会直接显示数学公式源码. 为了解决这两个问题,尝试了一些方法,最终利用开源类库实现了页面美化. (失 ...

  3. 如何在博客中插入jsfiddle的代码

    1.进入官网:https://jsfiddle.net/ 可以看到如下界面,顶端的控制按钮包括:保存,运行,代码格式化等: 2.将html.css.js分别写在指定的位置当中,最后一个框result是 ...

  4. 统一我的博客文章的CSS样式代码

    一.前因后果 之前写博客的时候也有写一些CSS代码来美化,不过都是凌乱的,每次再写一篇,又得重头来过去想,或者去拷贝原来的CSS设置.由于逻辑性不强,找一个配套的格式出来要花费不少时间. 今天我把部分 ...

  5. 基于 abp vNext 和 .NET Core 开发博客项目 - 数据访问和代码优先

    上一篇文章(https://www.cnblogs.com/meowv/p/12909558.html)完善了项目中的代码,接入了Swagger.本篇主要使用Entity Framework Core ...

  6. Spring3博客(内含ppt和代码的github地址)

    我们的Spring3相当于给我们的项目来了一次大整容!因为上次演示的时候,老师给我们的建议是做得小清新一点,所以我们项目改动挺大的. PPT地址:http://files.cnblogs.com/fi ...

  7. 六、Java多人博客系统-2.0版本-代码实现

    1.前后端分离,后端使用spring boot,只负责提供数据,对外暴露Restful API.前端使用vue,只负责展示数据和向后台提交数据. 2.数据库使用mariadb,存储所有数据. 3.前端 ...

  8. 个人博客作业Week2 是否需要有代码规范

    问题:是否需要有代码规范 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 1.这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 2.我是个艺术家,手艺人,我有 ...

  9. 【个人博客作业II】有关代码规范问题的讨论

    参考课程辅导书<构建之法>可以知道,程序的代码规范常指代码风格规范和代码设计规范两个方面,其中:代码风格规范包括(缩进,行宽,括号,断行与空白行,分行,命名,下划线,大小写,注释这几个部分 ...

随机推荐

  1. Java多线程(三)如何创建线程

    点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...

  2. C#基础知识之泛型集合转换为DataTable

    在做项目中,遇到了将集合转换为DataTable的使用,在网上看了资料,在这里记录下来,分享. using System; using System.Collections.Generic; usin ...

  3. 为什么react的组件要super(props)

    https://segmentfault.com/q/1010000008340434

  4. 设计模式のIteratorPattern(迭代器模式)----行为模式

    一.产生背景 迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式.这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示. 二.实现方式 ...

  5. 15.selenium_case04

    # 用selenium实现一个头条号的模拟发文接口 import time import redis from selenium import webdriver from selenium.webd ...

  6. Yahoo团队网站性能优化的35条黄金守则

    转载 Excetional Performance 团队总结出了一系列可以提高网站速度的方法.可以分为 7大类 35条.包括内容 .服务器 . CSS . JavaScript .Cookie .图片 ...

  7. C# Lambda 表达式学习之(四):动态构建类似于 c => c.Age == 2 || c.Age == 5 || c => c.Age == 17 等等一个或多个 OrElse 的表达式

    可能你还感兴趣: 1. C# Lambda 表达式学习之(一):得到一个类的字段(Field)或属性(Property)名,强类型得到 2. C# Lambda 表达式学习之(二):LambdaExp ...

  8. Leetcode:204

    编写一个程序判断给定的数是否为丑数.丑数就是只包含质因数 2, 3, 5 的正整数.统计所有小于非负整数 n 的质数的数量.示例:输入: 10输出: 4解释: 小于 10 的质数一共有 4 个, 它们 ...

  9. Spring batch

    学习了解 https://www.ibm.com/developerworks/cn/java/j-lo-springbatch1/index.html?ca=drs-#ibm-pcon

  10. Linux:Day24(下) samba

    samba: smb:Service Message Block 是一种协议 CIFS:Common Internet File System smb --> samba 137/udp,138 ...