Skip to content

Commit 593248c

Browse files
author
lareinayanyu
committed
feat: movable、scroll-view、canvas、video支持fixed定位
1 parent 3aeb7c4 commit 593248c

File tree

4 files changed

+32
-5
lines changed

4 files changed

+32
-5
lines changed

packages/webpack-plugin/lib/runtime/components/react/mpx-canvas/index.tsx

+9-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import './CanvasGradient'
3131
import { createImage as canvasCreateImage } from './Image'
3232
import { createImageData as canvasCreateImageData } from './ImageData'
3333
import { useConstructorsRegistry } from './constructorsRegistry'
34+
import Portal from '../mpx-portal'
3435

3536
const stylesheet = StyleSheet.create({
3637
container: { overflow: 'hidden', flex: 0 },
@@ -71,6 +72,7 @@ const _Canvas = forwardRef<HandlerRef<CanvasProps & View, CanvasProps>, CanvasPr
7172
const {
7273
normalStyle,
7374
hasSelfPercent,
75+
hasPositionFixed,
7476
setWidth,
7577
setHeight
7678
} = useTransformStyle(extendObject({}, style, stylesheet.container), {
@@ -280,7 +282,7 @@ const _Canvas = forwardRef<HandlerRef<CanvasProps & View, CanvasProps>, CanvasPr
280282
)
281283
}
282284

283-
return createElement(View, innerProps, createElement(WebView, {
285+
let canvasComponent: JSX.Element = createElement(View, innerProps, createElement(WebView, {
284286
ref: (element) => {
285287
if (canvasRef.current) {
286288
canvasRef.current.webview = element
@@ -293,6 +295,12 @@ const _Canvas = forwardRef<HandlerRef<CanvasProps & View, CanvasProps>, CanvasPr
293295
onLoad: onLoad,
294296
scrollEnabled: false
295297
}))
298+
299+
if (hasPositionFixed) {
300+
canvasComponent = createElement(Portal, null, canvasComponent)
301+
}
302+
303+
return canvasComponent
296304
})
297305

298306
_Canvas.displayName = 'mpxCanvas'

packages/webpack-plugin/lib/runtime/components/react/mpx-movable-area.tsx

+7-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import useNodesRef, { HandlerRef } from './useNodesRef'
88
import useInnerProps from './getInnerListeners'
99
import { MovableAreaContext } from './context'
1010
import { useTransformStyle, wrapChildren, useLayout, extendObject } from './utils'
11+
import Portal from './mpx-portal'
1112

1213
interface MovableAreaProps {
1314
style?: Record<string, any>;
@@ -30,6 +31,7 @@ const _MovableArea = forwardRef<HandlerRef<View, MovableAreaProps>, MovableAreaP
3031
normalStyle,
3132
hasVarDec,
3233
varContextRef,
34+
hasPositionFixed,
3335
setWidth,
3436
setHeight
3537
} = useTransformStyle(style, { enableVar, externalVarContext, parentFontSize, parentWidth, parentHeight })
@@ -51,7 +53,7 @@ const _MovableArea = forwardRef<HandlerRef<View, MovableAreaProps>, MovableAreaP
5153
ref: movableViewRef
5254
}, layoutProps), [], { layoutRef })
5355

54-
return createElement(MovableAreaContext.Provider, { value: contextValue }, createElement(
56+
let movableComponent: JSX.Element = createElement(MovableAreaContext.Provider, { value: contextValue }, createElement(
5557
View,
5658
innerProps,
5759
wrapChildren(
@@ -62,6 +64,10 @@ const _MovableArea = forwardRef<HandlerRef<View, MovableAreaProps>, MovableAreaP
6264
}
6365
)
6466
))
67+
if (hasPositionFixed) {
68+
movableComponent = createElement(Portal, null, movableComponent)
69+
}
70+
return movableComponent
6571
})
6672

6773
_MovableArea.displayName = 'MpxMovableArea'

packages/webpack-plugin/lib/runtime/components/react/mpx-scroll-view.tsx

+9-1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import useInnerProps, { getCustomEvent } from './getInnerListeners'
4040
import useNodesRef, { HandlerRef } from './useNodesRef'
4141
import { splitProps, splitStyle, useTransformStyle, useLayout, wrapChildren, extendObject, flatGesture, GestureHandler } from './utils'
4242
import { IntersectionObserverContext, ScrollViewContext } from './context'
43+
import Portal from './mpx-portal'
4344

4445
interface ScrollViewProps {
4546
children?: ReactNode;
@@ -172,6 +173,7 @@ const _ScrollView = forwardRef<HandlerRef<ScrollView & View, ScrollViewProps>, S
172173
hasVarDec,
173174
varContextRef,
174175
hasSelfPercent,
176+
hasPositionFixed,
175177
setWidth,
176178
setHeight
177179
} = useTransformStyle(style, { enableVar, externalVarContext, parentFontSize, parentWidth, parentHeight })
@@ -528,7 +530,7 @@ const _ScrollView = forwardRef<HandlerRef<ScrollView & View, ScrollViewProps>, S
528530
white: ['#fff']
529531
}
530532

531-
return createElement(
533+
let scrollViewComponent: JSX.Element = createElement(
532534
ScrollView,
533535
extendObject({}, innerProps, {
534536
refreshControl: refresherEnabled
@@ -552,6 +554,12 @@ const _ScrollView = forwardRef<HandlerRef<ScrollView & View, ScrollViewProps>, S
552554
)
553555
)
554556
)
557+
558+
if (hasPositionFixed) {
559+
scrollViewComponent = createElement(Portal, null, scrollViewComponent)
560+
}
561+
562+
return scrollViewComponent
555563
})
556564

557565
_ScrollView.displayName = 'MpxScrollView'

packages/webpack-plugin/lib/runtime/components/react/mpx-video.tsx

+7-2
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ import {
7474
} from './utils'
7575
import useInnerProps, { getCustomEvent } from './getInnerListeners'
7676
import useNodesRef, { HandlerRef } from './useNodesRef'
77+
import Portal from './mpx-portal'
7778

7879
interface VideoProps {
7980
src: string;
@@ -170,7 +171,7 @@ const MpxVideo = forwardRef<HandlerRef<View, VideoProps>, VideoProps>((videoProp
170171

171172
propsRef.current = props
172173

173-
const { normalStyle, hasSelfPercent, setWidth, setHeight } =
174+
const { normalStyle, hasSelfPercent, setWidth, setHeight, hasPositionFixed } =
174175
useTransformStyle(extendObject({}, styles.container, style), {
175176
enableVar,
176177
externalVarContext,
@@ -380,9 +381,13 @@ const MpxVideo = forwardRef<HandlerRef<View, VideoProps>, VideoProps>((videoProp
380381
],
381382
{ layoutRef }
382383
)
383-
return createElement(View, { style: extendObject({}, normalStyle, layoutStyle), ref: viewRef },
384+
let videoComponent: JSX.Element = createElement(View, { style: extendObject({}, normalStyle, layoutStyle), ref: viewRef },
384385
createElement(Video, innerProps)
385386
)
387+
if (hasPositionFixed) {
388+
videoComponent = createElement(Portal, null, videoComponent)
389+
}
390+
return videoComponent
386391
})
387392

388393
export default MpxVideo

0 commit comments

Comments
 (0)