react#WheelEvent TypeScript Examples
The following examples show how to use
react#WheelEvent.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: AmountInput.tsx From calories-in with MIT License | 5 votes |
function AmountInput({
name,
children,
acceptsFractions = false,
...rest
}: Props) {
function onMouseDown(event: MouseEvent<HTMLInputElement>) {
const input = event.target as HTMLInputElement
if (document.activeElement !== input) {
event.preventDefault()
const length = input.value.length
input.focus()
input.type = 'text'
input.setSelectionRange(length, length)
input.type = 'number'
}
}
function onWheel(event: WheelEvent<HTMLInputElement>) {
const target = event.target as HTMLInputElement
target.blur()
}
const numProps = acceptsFractions
? {}
: {
type: 'number',
pattern: '\\d*',
onMouseDown,
onWheel,
}
return (
<Flex alignItems="center">
<Input
fontSize="md"
autoComplete="off"
borderColor="gray.200"
textColor="gray.800"
textAlign="right"
bg="white"
maxWidth="68px"
{...numProps}
{...rest}
onChange={event => {
const { value } = event.target
const valueAsNumber = amountAsNumber(value)
if (valueAsNumber >= 0 && valueAsNumber < MAX_AMOUNT_EXCLUDING) {
rest.onChange && rest.onChange(event)
}
}}
/>
{children}
</Flex>
)
}
Example #2
Source File: PanelCanvas.tsx From ace with GNU Affero General Public License v3.0 | 4 votes |
PanelCanvas = ({ render }: PanelCanvasProps) => {
const transformContainerRef = useRef<HTMLElement>(null);
const transformWrapperRef = useRef<ReactZoomPanPinchRef>(null);
const transformContentRef = useRef<HTMLElement>(null);
const [zoom, setZoom] = useState(1);
const [, setOffsetX] = useState(0);
const [, setOffsetY] = useState(0);
useInterval(() => {
if (transformWrapperRef.current) {
setZoom(transformWrapperRef.current.state.scale);
setOffsetX(transformWrapperRef.current.state.positionX);
setOffsetY(transformWrapperRef.current.state.positionY);
}
}, 100);
useEffect(() => {
const element = document.querySelector('.react-transform-component') as HTMLElement;
if (element) {
transformContentRef.current = element;
}
}, []);
const [currentDoubleClickMode, setCurrentDoubleClickMode] = useState<'zoomIn' | 'zoomOut' | 'reset'>('zoomIn');
const [currentDoubleClickX, setCurrentDoubleClickX] = useState(0);
const [currentDoubleClickY, setCurrentDoubleClickY] = useState(0);
const doEmulateDoubleClick = useCallback(() => {
if (transformContainerRef.current) {
transformContainerRef.current.childNodes.forEach((node) => {
const wheelEvent = new globalThis.MouseEvent('dblclick', { clientX: currentDoubleClickX, clientY: currentDoubleClickY });
node.dispatchEvent(wheelEvent);
});
}
}, [currentDoubleClickX, currentDoubleClickY]);
useEffect(doEmulateDoubleClick, [doEmulateDoubleClick, currentDoubleClickMode]);
const handleWheel = useCallback((event: WheelEvent) => {
setCurrentDoubleClickX(event.clientX);
setCurrentDoubleClickY(event.clientY);
const newDoubleClickMode = event.deltaY > 0 ? 'zoomOut' : 'zoomIn';
setCurrentDoubleClickMode(newDoubleClickMode);
if (currentDoubleClickMode === newDoubleClickMode) {
doEmulateDoubleClick();
}
event.stopPropagation();
}, [currentDoubleClickMode, doEmulateDoubleClick]);
return (
<section className="w-full h-full bg-gray-900 overflow-hidden" ref={transformContainerRef} onWheel={handleWheel}>
<TransformWrapper
ref={transformWrapperRef}
limitToBounds
initialPositionX={-PANEL_CANVAS_SIZE / 2}
initialPositionY={-PANEL_CANVAS_SIZE / 2}
minScale={0.045}
panning={{
velocityDisabled: true,
}}
doubleClick={{
mode: currentDoubleClickMode,
step: 0.4,
}}
wheel={{
disabled: true,
}}
>
<TransformComponent
wrapperStyle={{
width: '100%',
height: '100%',
}}
>
<div style={{
overflow: 'hidden',
width: `${PANEL_CANVAS_SIZE}px`,
height: `${PANEL_CANVAS_SIZE}px`,
}}
>
{render({ zoom })}
</div>
</TransformComponent>
</TransformWrapper>
</section>
);
}