您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
github的雨滴效果
- // ==UserScript==
- // @name github rainmeter
- // @author wusuluren
- // @description github的雨滴效果
- // @require http://cdn.bootcss.com/jquery/1.8.3/jquery.min.js
- // @match *://github.com/*
- // @supportURL https://github.com/Wusuluren
- // @version 0.0.1
- // @grant None
- // @namespace https://greasyfork.org/users/194747
- // ==/UserScript==
- (function () {
- 'use strict';
- class Position {
- constructor(x, y) {
- this.x = x
- this.y = y
- }
- }
- class RainMeter extends Position {
- constructor(x, y, prev, next, expire, depth) {
- super(x, y)
- this.prev = prev
- this.next = next
- this.expire = expire
- this.passed = 0
- this.depth = depth
- }
- }
- var color_table = new Array()
- var Screen_Width, Screen_Height
- var map
- var rainmeter_head
- $(function(){
- get_color_table()
- clear_screen()
- init()
- var timer = setInterval(function() {
- update_rainmeter()
- }, 1000)
- })
- function clear_screen() {
- full(0)
- }
- function get_color_table () {
- var lis = $('.legend').children()
- for (var i = 0; i < lis.length; i++) {
- color_table[i] = lis[i].style.backgroundColor
- }
- }
- function draw_point(x, y, depth) {
- var gs = document.getElementsByTagName('g')
- if (x < gs.length) {
- var days = gs[x].getElementsByClassName('day')
- if (y < days.length) {
- days[y].setAttribute('fill', color_table[depth])
- }
- }
- }
- function draw_position(pos, depth) {
- var gs = document.getElementsByTagName('g')
- if (pos.x < gs.length) {
- var days = gs[pos.x].getElementsByClassName('day')
- if (pos.y < days.length) {
- days[pos.y].setAttribute('fill', color_table[depth])
- }
- }
- }
- function draw_rainmeter(rainmeter) {
- draw_position(rainmeter, rainmeter.depth)
- }
- function clear_rainmeter(rainmeter) {
- draw_position(rainmeter, 0)
- }
- function full (depth) {
- var gs = document.getElementsByTagName('g')
- if (gs === undefined)
- return false
- for (var x = 1; x < gs.length; x++) {
- for (var y = 0; y < 7; y++)
- draw_point(x, y, depth)
- }
- return true
- }
- function new_position() {
- var x = new_random(Screen_Width)
- var y = new_random(Screen_Height)
- if (map[y][x] === undefined || map[y][x] == 1)
- return undefined
- return new Position(x, y)
- }
- function new_random(max) {
- return Math.floor(Math.random() * max)
- }
- function same_position(a, b) {
- return a.x == b.x && a.y == b.y
- }
- function new_rainmeter() {
- var pos = new_position()
- if (pos === undefined) {
- return undefined
- }
- var expire = new_random(10) + 5
- var depth = new_random(4) + 1
- var rainmeter = new RainMeter(pos.x, pos.y, undefined, undefined, expire, depth)
- return rainmeter
- }
- function init() {
- var gs = document.getElementsByTagName('g')
- Screen_Width = gs.length
- Screen_Height = 7
- map = new Array()
- for (var y = 0; y < Screen_Height; y++) {
- map[y] = new Array()
- for (var x = 0; x < Screen_Width; x++)
- map[y][x] = 0
- }
- rainmeter_head = new_rainmeter()
- draw_rainmeter(rainmeter_head)
- map[rainmeter_head.y][rainmeter_head.x] = 1
- }
- function update_rainmeter() {
- var num = new_random(10) + 5
- for (var i = 0; i < num; i++) {
- var rainmeter = new_rainmeter()
- if (rainmeter !== undefined) {
- draw_rainmeter(rainmeter_head)
- map[rainmeter.y][rainmeter.x] = 1
- rainmeter_head.prev = rainmeter
- rainmeter.next = rainmeter_head
- rainmeter_head = rainmeter
- }
- }
- rainmeter = rainmeter_head
- while (rainmeter !== undefined) {
- if (rainmeter.passed > rainmeter.expire) {
- clear_rainmeter(rainmeter)
- map[rainmeter.y][rainmeter.x] = 0
- if (rainmeter.next !== undefined && rainmeter.next.prev !== undefined)
- rainmeter.next.prev = rainmeter.prev
- if (rainmeter.prev !== undefined && rainmeter.prev.next !== undefined)
- rainmeter.prev.next = rainmeter.next
- }
- rainmeter.passed++
- rainmeter = rainmeter.next
- }
- }
- })();