parent
cc71c39b88
commit
22b85ab570
4 changed files with 65 additions and 5 deletions
@ -0,0 +1,54 @@ |
||||
import gsap from "gsap" |
||||
import { forwardRef, useEffect, useImperativeHandle, useRef } from "react" |
||||
import { sendOsc } from "../util/osc"; |
||||
|
||||
const FADE_TIME=3; |
||||
|
||||
export const Light=forwardRef((props, ref)=>{ |
||||
|
||||
const refVal=useRef({val: 0}); |
||||
const refInput=useRef(); |
||||
const refContainer=useRef(); |
||||
|
||||
function fade(from, to){ |
||||
|
||||
const time= parseFloat(refInput.current.value) || FADE_TIME; |
||||
gsap.fromTo(refVal.current,{val: from}, { |
||||
val: to, |
||||
duration: time, |
||||
onUpdate: () => { |
||||
// console.log(refVal.current.val); |
||||
sendOsc('/light', refVal.current.val.toString()); |
||||
refContainer.current.style.background= `rgba(0, 255, 0, ${refVal.current.val})`; // Update background color based on value |
||||
}, |
||||
}); |
||||
} |
||||
useImperativeHandle(ref, () => ({ |
||||
fadeIn: ()=>{ |
||||
console.log('fadeIn'); |
||||
fade(0, 1); |
||||
}, |
||||
fadeOut: ()=>{ |
||||
console.log('fadeOut'); |
||||
fade(1, 0); |
||||
} |
||||
})); |
||||
useEffect(()=>{ |
||||
|
||||
refInput.current.value=FADE_TIME; |
||||
|
||||
},[]); |
||||
|
||||
return ( |
||||
<div ref={refContainer} className="flex flex-row gap-4 !w-auto p-1 border"> |
||||
<span className="flex flex-col justify-between"> |
||||
<label className="text-center">Light</label> |
||||
<input ref={refInput} type="text" className="border w-[5vw]" defaultValue={5}/> |
||||
</span> |
||||
<span className="flex flex-col justify-between"> |
||||
<button onClick={()=>fade(0,1)}>fadeIn</button> |
||||
<button onClick={()=>fade(1,0)}>fadeOut</button> |
||||
</span> |
||||
</div> |
||||
) |
||||
}); |
||||
Loading…
Reference in new issue