vanta
Version:
3D animated backgrounds for your website
64 lines (55 loc) • 2.1 kB
JavaScript
Number.prototype.clamp = function(min, max) { return Math.min(Math.max(this, min), max) }
// # module.exports = helpers
export function mobileCheck(){
if (typeof navigator !== 'undefined') {
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || window.innerWidth < 600
}
return null
}
export const sample = items => items[Math.floor(Math.random()*items.length)]
export function rn(start,end) {
if (start == null) start = 0
if (end == null) end = 1
return start + (Math.random() * (end - start))
}
export function ri(start,end) {
if (start == null) start = 0
if (end == null) end = 1
return Math.floor(start + (Math.random() * ((end - start) + 1)))
}
export const q = sel => document.querySelector(sel)
export const color2Hex = (color) => {
if (typeof color == 'number'){
return '#' + ('00000' + color.toString(16)).slice(-6)
} else return color
}
export const color2Rgb = (color, alpha=1) => {
const hex = color2Hex(color)
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)
const obj = result ? {
r: parseInt(result[1], 16),
g: parseInt(result[2], 16),
b: parseInt(result[3], 16)
} : null
return 'rgba('+ obj.r +','+ obj.g +','+ obj.b +','+ alpha +')'
}
export const getBrightness = (threeColor) => {
return (0.299 * threeColor.r) + (0.587 * threeColor.g) + (0.114 * threeColor.b);
}
export function clearThree(obj) {
// https://stackoverflow.com/questions/30359830/how-do-i-clear-three-js-scene/48722282
while (obj.children && obj.children.length > 0) {
clearThree(obj.children[0])
obj.remove(obj.children[0])
}
if (obj.geometry) obj.geometry.dispose()
if (obj.material) { // in case of map, bumpMap, normalMap, envMap ...
Object.keys(obj.material).forEach(prop => {
if (!obj.material[prop]) return
if (obj.material[prop] !== null && typeof obj.material[prop].dispose === 'function') {
obj.material[prop].dispose()
}
})
obj.material.dispose()
}
}