Skip to content

Instantly share code, notes, and snippets.

View takumifukasawa's full-sized avatar

takumifukasawa takumifukasawa

View GitHub Profile
@takumifukasawa
takumifukasawa / parallelTweens.js
Created June 10, 2020 11:01
ES6: manually run GSAP tweens in parallel
/*
* # usage
* const tweenSequence = thisFunc([tween1, tween2, ... more tweens]);
* tweenSquence.update(time);
*/
import { forEach, every } from "lodash"
export default (...tweens) => {
return {
@takumifukasawa
takumifukasawa / createAnimatedSprite.js
Last active June 15, 2020 05:42
ES6: create PIXI.js animated sprite
import { map } from "lodash"
export default ({ frames, container }) => {
const sprite = new PIXI.AnimatedSprite(
map(frames, frame => {
const texture = PIXI.Texture.from(frame)
return texture
})
)
@takumifukasawa
takumifukasawa / webworker-blob.js
Last active June 25, 2020 12:34
WebWorker worked on Blob
const workerCode = `
onmessage = function(e) {
console.log('worker thread: onmessage');
console.log(e)
}
`;
const workerScript = URL.createObjectURL(
new window.Blob([workerCode], { type: "application/javascript" })
);
@takumifukasawa
takumifukasawa / youtubeLiveConcurrentViewers.js
Created July 25, 2020 12:23
check youtube live concurrent viewers
const VIDEO_ID = "video_id";
const API_KEY = "your_api_key";
async function getVideoData() {
const url = `https://www.googleapis.com/youtube/v3/videos?part=liveStreamingDetails&id=${VIDEO_ID}&key=${API_KEY}`;
try {
const response = await fetch(url, {
method: 'GET',
});
const result = await response.json();
@takumifukasawa
takumifukasawa / webpack-eslnt-loader-config-files.js
Last active August 8, 2020 03:39
example of specifing eslintrc and eslintignore file in webpack eslint-loader.
module.exports = {
module: {
rules: [{
test: /\.ts?$/,
exclude: [/node_modules/],
enforce: "pre",
use: {
loader: "eslint-loader",
options: {
fix: true,
@takumifukasawa
takumifukasawa / camelcase.js
Last active September 14, 2020 15:04
javascript: kebab case to camel case
export default (str) => str.split("-").map((text, i) => i === 0 ? text : text.substr(0, 1).toUpperCase() + text.substr(1)).join("");
@takumifukasawa
takumifukasawa / useTimeout.ts
Last active November 5, 2020 01:07
React: manage window timeout custom hooks
import { useEffect, useRef } from "react";
/**
* manage window timeout hooks
*
* ex)
*
* const [beginTimer, clearTimer] = useTimeout(() => { ... }, ms);
*
* useEffect(() => {
@takumifukasawa
takumifukasawa / useAsyncMemo.ts
Created November 4, 2020 13:45
React: memolize async value custom hooks
import { DependencyList, useEffect, useState } from "react";
/**
* memolize async value custom hooks
*
* base: https://github.com/awmleer/use-async-memo
*
* usage1: const value = useAsyncMemo(async () => {}, [deps1, dep2, ...]);
* usage2: const value = useAsyncMemo(async () => {}, [deps1, dep2, ...], initialValue);
*
@takumifukasawa
takumifukasawa / useDimensions.ts
Created November 4, 2020 13:48
React: get dom dimensions custom hooks
import { RefObject, useEffect, useRef, useState } from "react";
type Dimensions = {
bottom: number;
height: number;
left: number;
right: number;
top: number;
width: number;
x: number;
@takumifukasawa
takumifukasawa / useHover.ts
Created November 4, 2020 13:49
React: mange dom hover custom hooks
import { useEffect, useRef, useState, RefObject } from "react";
import { useComponentWillUnmount } from "~/hooks/common/useLifecycle";
export default function useHover<T extends HTMLElement>(): [
RefObject<T>,
boolean
] {
let willunmount = false;
useComponentWillUnmount(() => {
willunmount = true;