@conecli/cone-render 0.10.1-shop3.5 → 0.10.1-shop3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/const.ts +1 -1
- package/dist/common/index.h5.ts +1 -1
- package/dist/common/index.jd.ts +1 -1
- package/dist/common/index.ts +1 -1
- package/dist/common/index.weapp.ts +1 -1
- package/dist/components/base/CommonFloorHead/index.module.scss +126 -111
- package/dist/components/base/CommonFloorHead/index.tsx +1 -1
- package/dist/components/base/CustomScrollView/index-back.tsx +1 -0
- package/dist/components/base/CustomScrollView/index.tsx +1 -1
- package/dist/components/base/Dialog/index.module.scss +11 -0
- package/dist/components/base/InViewRender/index.tsx +1 -1
- package/dist/components/floorItem.weapp.tsx +1 -1
- package/dist/interface/common.ts +1 -1
- package/dist/jumpEventReport/const.ts +1 -1
- package/dist/jumpEventReport/jdJumpJdApp.ts +1 -1
- package/dist/jumpEventReport/web.jd.ts +1 -1
- package/dist/libs/taroAppReport.js +2 -2
- package/dist/modules/ContainerFloorList/index.h5.module.scss +66 -56
- package/dist/modules/ContainerFloorList/index.h5.tsx +1 -1
- package/dist/modules/ContainerFloorList/index.tsx +1 -1
- package/dist/open/api/shopMember.ts +1 -1
- package/dist/sass/app.h5.scss +252 -224
- package/dist/service/fetchGateway.ts +1 -1
- package/dist/service/fetchGateway.weapp.ts +1 -0
- package/dist/service/http/colorSign.ts +1 -1
- package/dist/service/http/const.ts +1 -1
- package/dist/service/http/h5Http.ts +1 -1
- package/dist/service/requestServer.h5.ts +1 -1
- package/dist/service/requestServer.ts +1 -1
- package/dist/utils/h5Utils.ts +1 -1
- package/dist/utils/index.h5.ts +1 -1
- package/dist/utils/index.ts +1 -1
- package/dist/utils/index.weapp.ts +1 -1
- package/dist/utils/jumpExtMapUtil.js +1 -0
- package/dist/utils/utils.ts +1 -1
- package/package.json +1 -1
|
@@ -1,148 +1,163 @@
|
|
|
1
1
|
.d-root {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
position: relative;
|
|
3
|
+
width: 100%;
|
|
4
|
+
margin-bottom: -24px;
|
|
5
|
+
background-color: #ffffff;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
.d-content-wrap {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
9
|
+
position: absolute;
|
|
10
|
+
// display: flex;
|
|
11
|
+
// align-items: center;
|
|
12
|
+
top: 0;
|
|
13
|
+
left: 0;
|
|
14
|
+
width: 100%;
|
|
15
|
+
height: 96px;
|
|
16
|
+
// height: 100%;
|
|
17
|
+
|
|
18
|
+
&.d-has-title-bg {
|
|
19
|
+
background-size: cover;
|
|
20
|
+
|
|
21
|
+
.d-text {
|
|
22
|
+
// margin-top: -14px;
|
|
23
|
+
color: #ffffff;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.d-sub-text {
|
|
27
|
+
// margin-top: -8px;
|
|
28
|
+
color: #ffffff;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.d-content {
|
|
32
|
+
bottom: 40px;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
&.d-type-is-img {
|
|
37
|
+
.d-content {
|
|
38
|
+
bottom: 44%; // 当图片标题类型渲染时,兼容新老数据,下发的图片高度会有几个尺寸,所以这里改成百分比
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.d-text {
|
|
43
|
+
// margin-top: 16px;
|
|
44
|
+
margin-left: 20px;
|
|
45
|
+
font-family: 'PingFang SC';
|
|
46
|
+
font-size: 32px;
|
|
47
|
+
// line-height: 32px;
|
|
48
|
+
font-weight: bold;
|
|
49
|
+
color: #1a1a1a;
|
|
50
|
+
|
|
51
|
+
// hack修复在使用overflowhidden(为了实现过长自动出现省略号)前提下,某些字体,例如PingFang SC,默认行高时,基线和底线部分的字体内容(例如:jpqy)有可能显示不完整的问题
|
|
52
|
+
position: relative;
|
|
53
|
+
top: 2px;
|
|
54
|
+
padding-bottom: 2px;
|
|
55
55
|
// 文字titile行高不够被遮盖问题 比如“g”字母
|
|
56
56
|
line-height: 1.3;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.d-vertical-line {
|
|
60
|
+
position: relative;
|
|
61
|
+
top: -4px;
|
|
62
|
+
width: 1px;
|
|
63
|
+
height: 24px;
|
|
64
|
+
margin-left: 12px;
|
|
65
|
+
opacity: 0.3;
|
|
66
|
+
background: #ffffff;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.d-sub-text {
|
|
70
|
+
position: relative;
|
|
71
|
+
top: -2px;
|
|
72
|
+
margin-left: 12px;
|
|
73
|
+
font-family: 'PingFang SC';
|
|
74
|
+
font-size: 24px;
|
|
75
|
+
color: #808080;
|
|
76
|
+
}
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
.d-content-wrap-relative {
|
|
80
|
-
|
|
80
|
+
position: relative;
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
.d-content {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
84
|
+
position: absolute;
|
|
85
|
+
bottom: 22px;
|
|
86
|
+
width: 100%;
|
|
87
|
+
display: flex;
|
|
88
|
+
justify-content: space-between;
|
|
89
|
+
align-items: flex-end;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
.d-content-left {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
93
|
+
flex: 1;
|
|
94
|
+
display: flex;
|
|
95
|
+
justify-content: flex-start;
|
|
96
|
+
align-items: flex-end;
|
|
97
|
+
max-width: calc(100% - 108px);
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
.d-content-right {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
101
|
+
display: flex;
|
|
102
|
+
align-items: flex-end;
|
|
103
|
+
flex-shrink: 0;
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
.d-title-more {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
107
|
+
position: relative;
|
|
108
|
+
top: 16px;
|
|
109
|
+
display: flex;
|
|
110
|
+
align-items: flex-end;
|
|
111
|
+
height: 56px;
|
|
112
|
+
padding-bottom: 20px;
|
|
113
|
+
padding-left: 20px;
|
|
114
|
+
padding-right: 20px;
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
.d-title-more-text {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
118
|
+
font-family: 'PingFang SC';
|
|
119
|
+
font-size: 24px;
|
|
120
|
+
color: #808080;
|
|
121
|
+
display: flex;
|
|
122
|
+
align-items: center;
|
|
123
|
+
font-weight: normal;
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
.d-title-more-text-white {
|
|
127
|
-
|
|
127
|
+
color: #ffffff;
|
|
128
128
|
}
|
|
129
129
|
|
|
130
130
|
.d-title-more-arrow {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
131
|
+
position: relative;
|
|
132
|
+
top: -4px;
|
|
133
|
+
width: 12px;
|
|
134
|
+
height: 20px;
|
|
135
|
+
margin-left: 10px;
|
|
136
136
|
}
|
|
137
137
|
|
|
138
138
|
.d-img {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
139
|
+
width: 100%;
|
|
140
|
+
display: block;
|
|
141
|
+
// height: auto;
|
|
142
|
+
height: 96px;
|
|
143
|
+
background: no-repeat top/100% auto;
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
.d-place-holder {
|
|
147
|
-
|
|
147
|
+
height: 24px;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
:global {
|
|
151
|
+
.d-shop-pad {
|
|
152
|
+
:local {
|
|
153
|
+
.d-root {
|
|
154
|
+
.d-content-wrap-for-img {
|
|
155
|
+
height: 164px;
|
|
156
|
+
}
|
|
157
|
+
.d-img-bg {
|
|
158
|
+
height: 164px;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
148
163
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React, { useMemo } from 'react'
|
|
2
1
|
key: 1,
|
|
2
|
+
import React, { useMemo } from 'react';
|
|
3
3
|
'https://m.360buyimg.com/imagetools/jfs/t1/170321/15/27425/230/61c1839aE0514462b/0b4d278fe18d91bb.png';
|
|
4
4
|
'https://m.360buyimg.com/imagetools/jfs/t1/94671/2/26921/257/623d630aE681512e3/ded2e640c4a0a7ea.png';
|
|
5
5
|
const getLogInfo = ReportContainerData.getReportClickFloorInfo(
|
|
6
6
|
floorData,
|
|
7
7
|
dataDefines,
|
|
8
8
|
{
|
|
9
9
|
clickArea: `title`,
|
|
10
10
|
skuid: ``,
|
|
11
11
|
tagList: [],
|
|
12
12
|
labelList: [],
|
|
13
13
|
pos: ``,
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
la_p: ``,
|
|
17
17
|
},
|
|
18
18
|
);
|
|
19
19
|
if (config) {
|
|
20
20
|
JumpEventReport.jdJumpConfigUrl(config, {
|
|
21
21
|
eventId: `TerminatorNew_${floorData.floorExtInfo?.moduleFlag}_Click`,
|
|
22
22
|
jsonParam: getLogInfo,
|
|
23
23
|
});
|
|
24
24
|
}
|
|
25
25
|
dataDefines,
|
|
26
26
|
floorData,
|
|
27
27
|
oldModuleFloorTitle,
|
|
28
28
|
titleText,
|
|
29
29
|
titleMoreClick,
|
|
30
30
|
additionalRenderContent,
|
|
31
31
|
customClassName,
|
|
32
32
|
const floorTitleDataDefine = dataDefines
|
|
33
33
|
? dataDefines.filter((item) => {
|
|
34
34
|
return item.type === 'floorTitle';
|
|
35
35
|
})
|
|
36
36
|
: [];
|
|
37
37
|
const floorTitle = oldModuleFloorTitle
|
|
38
38
|
? oldModuleFloorTitle
|
|
39
39
|
: (floorTitleDataDefine[0]?.nodeText?.data ?? {});
|
|
40
40
|
const { detail, imageUrl, text, textBackground, type: floorTitleType = 1, subText } = floorTitle;
|
|
41
41
|
if (floorTitleType === 1) {
|
|
42
42
|
return null;
|
|
43
43
|
}
|
|
44
44
|
const bgMap = {
|
|
45
45
|
'1': null,
|
|
46
46
|
'2': textBackground || '',
|
|
47
47
|
'3': imageUrl || '',
|
|
48
48
|
};
|
|
49
49
|
const useFloorTitleBgImg = bgMap[floorTitleType];
|
|
50
50
|
return (
|
|
51
51
|
<View
|
|
52
52
|
className={classNames(styles['d-root'], customClassName)}
|
|
53
53
|
onClick={floorTitleType === 3 ? gotoMPage.bind(this, dataDefines, floorData, detail) : {}}
|
|
54
54
|
>
|
|
55
55
|
<View
|
|
56
56
|
className={classNames(styles['d-img'], {
|
|
57
57
|
[styles['d-img-bg']]: useFloorTitleBgImg,
|
|
58
58
|
})}
|
|
59
59
|
style={useFloorTitleBgImg ? { backgroundImage: `url(${useFloorTitleBgImg})` } : {}}
|
|
60
60
|
/>
|
|
61
61
|
<View
|
|
62
62
|
className={classNames(
|
|
63
63
|
styles['d-content-wrap'],
|
|
64
64
|
floorTitleType === 2 && textBackground ? styles['d-has-title-bg'] : null,
|
|
65
65
|
floorTitleType === 3 ? styles['d-type-is-img'] : null,
|
|
66
66
|
useFloorTitleBgImg ? styles['d-content-wrap-for-img'] : null,
|
|
67
67
|
)}
|
|
68
68
|
>
|
|
69
69
|
<View className={classNames(styles['d-content'], 'd-content')}>
|
|
70
70
|
<View className={styles['d-content-left']}>
|
|
71
71
|
{floorTitleType === 2 && text ? (
|
|
72
72
|
<Text className={classNames(styles['d-text'], 'text-ellipsis')}>
|
|
73
73
|
{titleText ? titleText : text}
|
|
74
74
|
</Text>
|
|
75
75
|
) : null}
|
|
76
76
|
{floorTitleType === 2 && subText
|
|
77
77
|
? [
|
|
78
78
|
textBackground ? <View key={1} className={styles['d-vertical-line']} /> : null,
|
|
79
79
|
<Text key={2} className={styles['d-sub-text']}>
|
|
80
80
|
{subText}
|
|
81
81
|
</Text>,
|
|
82
82
|
]
|
|
83
83
|
: null}
|
|
84
84
|
{additionalRenderContent ? additionalRenderContent(textBackground) : null}
|
|
85
85
|
</View>
|
|
86
86
|
<View className={styles['d-content-right']}>
|
|
87
87
|
{titleMoreClick ? (
|
|
88
88
|
<View
|
|
89
89
|
className={styles['d-title-more']}
|
|
90
90
|
onClick={(e) => {
|
|
91
91
|
typeof titleMoreClick === 'function' && titleMoreClick(e);
|
|
92
92
|
e.stopPropagation();
|
|
93
93
|
}}
|
|
94
94
|
>
|
|
95
95
|
<Text
|
|
96
96
|
className={classNames(
|
|
97
97
|
styles['d-title-more-text'],
|
|
98
98
|
textBackground || floorTitleType === 3
|
|
99
99
|
? styles['d-title-more-text-white']
|
|
100
100
|
: null,
|
|
101
101
|
)}
|
|
102
102
|
>
|
|
103
103
|
更多
|
|
104
104
|
</Text>
|
|
105
105
|
<Image
|
|
106
106
|
className={styles['d-title-more-arrow']}
|
|
107
107
|
src={textBackground || floorTitleType === 3 ? ICON_ARROW_WHITE : ICON_ARROW_GRAY}
|
|
108
108
|
mode="widthFix"
|
|
109
109
|
/>
|
|
110
110
|
</View>
|
|
111
111
|
) : null}
|
|
112
112
|
</View>
|
|
113
113
|
</View>
|
|
114
114
|
</View>
|
|
115
115
|
</View>
|
|
116
116
|
);
|
|
117
117
|
return useMemo(() => {
|
|
118
118
|
return <CommonFloorHeader {...props} />;
|
|
119
119
|
}, [props.key]);
|
|
120
120
|
titleText: null,
|
|
121
121
|
titleMoreClick: null,
|
|
122
122
|
additionalRenderContent: null,
|
|
123
123
|
customClassName: null,
|
|
124
124
|
key: 1,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import React, { useRef, useEffect } from 'react';
|
|
2
|
isH5AndJdShopView,
|
|
1
3
|
isAndroidDevice,
|
|
2
4
|
isJdAndAndroidDevice,
|
|
3
5
|
isJdAndIosDevice,
|
|
4
6
|
isIosDevice,
|
|
5
7
|
isJdApp,
|
|
6
8
|
isWxMin,
|
|
7
9
|
isH5AndJdShopViewH5Scroll,
|
|
8
10
|
isH5AndJdShopH5CustomScrollView,
|
|
9
11
|
isH5,
|
|
10
12
|
isAppClassifyPage,
|
|
11
13
|
lodashThrottle,
|
|
12
14
|
START: 'start',
|
|
13
15
|
MOVE: 'move',
|
|
14
16
|
END: 'end',
|
|
15
17
|
const {
|
|
16
18
|
style = {},
|
|
17
19
|
scrollX = false,
|
|
18
20
|
scrollY = false,
|
|
19
21
|
scrollWithAnimation = true,
|
|
20
22
|
iosNeedDisableVertical = false,
|
|
21
23
|
className = null,
|
|
22
24
|
dispatchTouchMove = true,
|
|
23
25
|
children,
|
|
24
26
|
...otherProps
|
|
25
27
|
} = props;
|
|
26
28
|
const rootEleNode = isH5 && document?.querySelector('body');
|
|
27
29
|
const needShowHighVersion =
|
|
28
30
|
isH5AndJdShopViewH5Scroll && global.info.queryInfo?.downgraded !== 'true';
|
|
29
31
|
const mLastClientPosRef = useRef({
|
|
30
32
|
mLastClientX: 0,
|
|
31
33
|
mLastClientY: 0,
|
|
32
34
|
});
|
|
33
35
|
const isJdAndH5ScrollState = needShowHighVersion || isH5AndJdShopH5CustomScrollView;
|
|
34
36
|
|
|
35
37
|
const touchstartEventBubbleFunc = (e) => {
|
|
36
38
|
const isH5SwiperCustomEle = e?.target?.closest('.J_h5SwiperCustom');
|
|
37
39
|
if (!isH5SwiperCustomEle) {
|
|
38
40
|
const hasCustomEle = e
|
|
39
41
|
? e?.target?.closest('.J_customScroll') || e?.target?.closest('.J_customLayout')
|
|
40
42
|
: false;
|
|
41
43
|
if (isJdAndAndroidDevice && !hasCustomEle) {
|
|
42
44
|
window.JdAndroid && window.JdAndroid.requestEvent(false);
|
|
43
45
|
}
|
|
44
46
|
!hasCustomEle &&
|
|
45
47
|
rootEleNode &&
|
|
46
48
|
rootEleNode.classList.contains('over-hidden') &&
|
|
47
49
|
rootEleNode.classList.remove('over-hidden');
|
|
48
50
|
}
|
|
49
51
|
};
|
|
50
52
|
const touchstartEventCaptureFunc = (e) => {
|
|
51
53
|
if (e && !e?.target?.closest('.J_h5SwiperCustom') && !e?.target?.closest('.J_customLayout')) {
|
|
52
54
|
rootEleNode &&
|
|
53
55
|
rootEleNode.classList.contains('over-hidden') &&
|
|
54
56
|
rootEleNode.classList.remove('over-hidden');
|
|
55
57
|
}
|
|
56
58
|
};
|
|
57
59
|
useEffect(() => {
|
|
58
60
|
isJdApp &&
|
|
59
61
|
!window.JDJshopViewInfo.getAndroidTouchSlopState &&
|
|
60
62
|
nativePageGetScaledTouchSlop((res) => {
|
|
61
63
|
console.log('获取安卓系统滑动阈值', res);
|
|
62
64
|
window.JDJshopViewInfo.androidTouchSlop = res;
|
|
63
65
|
window.JDJshopViewInfo.getAndroidTouchSlopState = true;
|
|
64
66
|
});
|
|
65
67
|
if (isJdAndH5ScrollState && rootEleNode && !rootEleAddEventListenerState) {
|
|
66
68
|
global?.removeJdAndroidRquestEventForTouchStart &&
|
|
67
69
|
global.removeJdAndroidRquestEventForTouchStart();
|
|
68
70
|
rootEleNode.addEventListener('touchstart', touchstartEventBubbleFunc, false);
|
|
69
71
|
|
|
70
72
|
rootEleNode.addEventListener('touchstart', touchstartEventCaptureFunc, true);
|
|
71
73
|
rootEleAddEventListenerState = true;
|
|
72
74
|
console.log('customScrollView 初始化document监听完成');
|
|
73
75
|
}
|
|
74
76
|
return () => {
|
|
75
77
|
if (isJdAndH5ScrollState && rootEleNode && rootEleAddEventListenerState) {
|
|
76
78
|
console.log('customScrollView document监听取消完成');
|
|
77
79
|
rootEleNode.removeEventListener('touchstart', touchstartEventBubbleFunc, false);
|
|
78
80
|
rootEleNode.removeEventListener('touchstart', touchstartEventCaptureFunc, true);
|
|
79
81
|
}
|
|
80
82
|
};
|
|
81
83
|
}, []);
|
|
82
84
|
|
|
83
85
|
const androidDeviceStopNativeScrollEvent = (touchType) => {
|
|
84
86
|
isJdApp &&
|
|
85
87
|
isAndroidDevice &&
|
|
86
88
|
window?.JdAndroid &&
|
|
87
89
|
window?.JdAndroid.requestEvent(touchType === TouchType.START);
|
|
88
90
|
};
|
|
89
91
|
const iosDeviceStopNativeScrollEvent = (e, touchType, sendIosState = true) => {
|
|
90
92
|
sendIosState && iosDeviceSendRouter(touchType);
|
|
91
93
|
};
|
|
92
94
|
|
|
93
95
|
const iosDeviceSendRouter = (state: string) => {
|
|
94
96
|
window?.webkit?.messageHandlers?.MobileNavi?.postMessage?.({
|
|
95
97
|
method: 'callRouterModuleWithParams',
|
|
96
98
|
params: {
|
|
97
99
|
routerURL: 'router://JDShopModule/processShoph5SlideState',
|
|
98
100
|
routerParam: {
|
|
99
101
|
slideDirection: 'horizontal',
|
|
100
102
|
needDisableVertical: `${iosNeedDisableVertical}`,
|
|
101
103
|
state,
|
|
102
104
|
},
|
|
103
105
|
callBackId: new Date().getTime(),
|
|
104
106
|
},
|
|
105
107
|
});
|
|
106
108
|
};
|
|
107
109
|
const stopNativeScrollEvent = (e: Event, touchType, sendIosState = true) => {
|
|
108
110
|
if (isJdApp) {
|
|
109
111
|
if (isIosDevice && !isAppClassifyPage) {
|
|
110
112
|
iosDeviceStopNativeScrollEvent(e, touchType, sendIosState);
|
|
111
113
|
} else if (isAndroidDevice) {
|
|
112
114
|
androidDeviceStopNativeScrollEvent(touchType);
|
|
113
115
|
}
|
|
114
116
|
}
|
|
115
117
|
};
|
|
116
118
|
|
|
117
119
|
const GetSlideAngle = (dx, dy) => {
|
|
118
120
|
return (Math.atan2(dy, dx) * 180) / Math.PI;
|
|
119
121
|
};
|
|
120
122
|
|
|
121
123
|
const GetSlideDirection = (startX, startY, endX, endY) => {
|
|
122
124
|
const dy = startY - endY;
|
|
123
125
|
const dx = endX - startX;
|
|
124
126
|
let result = 0;
|
|
125
127
|
if (Math.abs(dx) < 2 && Math.abs(dy) < 2) {
|
|
126
128
|
return result;
|
|
127
129
|
}
|
|
128
130
|
const angle = GetSlideAngle(dx, dy);
|
|
129
131
|
if (angle >= -45 && angle < 45) {
|
|
130
132
|
result = 4;
|
|
131
133
|
} else if (angle >= 45 && angle < 135) {
|
|
132
134
|
result = 1;
|
|
133
135
|
} else if (angle >= -135 && angle < -45) {
|
|
134
136
|
result = 2;
|
|
135
137
|
} else if ((angle >= 135 && angle <= 180) || (angle >= -180 && angle < -135)) {
|
|
136
138
|
result = 3;
|
|
137
139
|
}
|
|
138
140
|
return result;
|
|
139
141
|
};
|
|
140
142
|
const changeTouchStart = (e) => {
|
|
141
143
|
if (isJdApp) {
|
|
142
144
|
stopNativeScrollEvent(e, TouchType.START, !iosNeedDisableVertical);
|
|
143
145
|
if (isH5AndJdShopView || isH5AndJdShopH5CustomScrollView) {
|
|
144
146
|
isJdAndH5ScrollState && rootEleNode && rootEleNode.classList.add('over-hidden');
|
|
145
147
|
const touchEvent = e?.originalEvent?.targetTouches[0] || e?.targetTouches[0];
|
|
146
148
|
mLastClientPosRef.current.mLastClientX = touchEvent.clientX;
|
|
147
149
|
mLastClientPosRef.current.mLastClientY = touchEvent.clientY;
|
|
148
150
|
}
|
|
149
151
|
}
|
|
150
152
|
};
|
|
151
153
|
const changeTouchEnd = (e) => {
|
|
152
154
|
stopNativeScrollEvent(e, TouchType.END);
|
|
153
155
|
mLastClientPosRef.current.mLastClientX = 0;
|
|
154
156
|
mLastClientPosRef.current.mLastClientY = 0;
|
|
155
157
|
};
|
|
156
158
|
const triggerIosTouchMove = () => {
|
|
157
159
|
isJdAndIosDevice && iosDeviceStopNativeScrollEvent(null, TouchType.START, true);
|
|
158
160
|
};
|
|
159
161
|
|
|
160
162
|
const lodashThrottleTriggerIosTouchMove = lodashThrottle(triggerIosTouchMove, 500);
|
|
161
163
|
|
|
162
164
|
const recoverRootEleVerticalScroll = (touchEvent) => {
|
|
163
165
|
const direction = GetSlideDirection(
|
|
164
166
|
mLastClientPosRef.current.mLastClientX,
|
|
165
167
|
mLastClientPosRef.current.mLastClientY,
|
|
166
168
|
touchEvent.clientX,
|
|
167
169
|
touchEvent.clientY,
|
|
168
170
|
);
|
|
169
171
|
if (direction === 1 || direction === 2) {
|
|
170
172
|
rootEleNode &&
|
|
171
173
|
rootEleNode.classList.contains('over-hidden') &&
|
|
172
174
|
rootEleNode.classList.remove('over-hidden');
|
|
173
175
|
}
|
|
174
176
|
};
|
|
175
177
|
const changeTouchMove = (e) => {
|
|
176
178
|
if (isH5AndJdShopView || isH5AndJdShopH5CustomScrollView) {
|
|
177
179
|
const touchEvent = e?.originalEvent?.targetTouches[0] || e?.targetTouches[0];
|
|
178
180
|
const xDiff = Math.abs(touchEvent.clientX - mLastClientPosRef.current.mLastClientX).toFixed(
|
|
179
181
|
2,
|
|
180
182
|
);
|
|
181
183
|
const yDiff = Math.abs(touchEvent.clientY - mLastClientPosRef.current.mLastClientY).toFixed(
|
|
182
184
|
2,
|
|
183
185
|
);
|
|
184
186
|
if (isJdApp) {
|
|
185
187
|
if (xDiff >= window.JDJshopViewInfo.androidTouchSlop) {
|
|
186
188
|
iosNeedDisableVertical && isJdApp && lodashThrottleTriggerIosTouchMove();
|
|
187
189
|
} else if (yDiff > window.JDJshopViewInfo.androidTouchSlop) {
|
|
188
190
|
stopNativeScrollEvent(e, TouchType.END);
|
|
189
191
|
}
|
|
190
192
|
}
|
|
191
193
|
isJdAndH5ScrollState && recoverRootEleVerticalScroll(touchEvent);
|
|
192
194
|
}
|
|
193
195
|
if (!dispatchTouchMove) {
|
|
194
196
|
return;
|
|
195
197
|
}
|
|
196
198
|
const parentNode = e.target?.parentNode;
|
|
197
199
|
if (!parentNode) {
|
|
198
200
|
return;
|
|
199
201
|
}
|
|
200
202
|
const event = new TouchEvent('touchmove', e);
|
|
201
203
|
parentNode.dispatchEvent(event);
|
|
202
204
|
};
|
|
203
205
|
if (scrollX && isJdApp && !isIgnorePreventNative) {
|
|
204
206
|
return (
|
|
205
207
|
<ScrollView
|
|
206
208
|
scrollX
|
|
207
209
|
onTouchStart={changeTouchStart}
|
|
208
210
|
onTouchEnd={changeTouchEnd}
|
|
209
211
|
onTouchCancel={changeTouchEnd}
|
|
210
212
|
onTouchMove={changeTouchMove}
|
|
211
213
|
enhanced
|
|
212
214
|
showScrollbar={false}
|
|
213
215
|
style={style}
|
|
214
216
|
className={classNames(
|
|
215
217
|
className,
|
|
216
218
|
{
|
|
217
219
|
[customScrollViewStyle['d-custom-ios-h5-extend-border-radius']]: isIosDevice,
|
|
218
220
|
},
|
|
219
221
|
'J_customScroll',
|
|
220
222
|
)}
|
|
221
223
|
scrollY
|
|
222
224
|
scrollWithAnimation
|
|
223
225
|
{...otherProps}
|
|
224
226
|
>
|
|
225
227
|
{children}
|
|
226
228
|
</ScrollView>
|
|
227
229
|
);
|
|
228
230
|
} else {
|
|
229
231
|
return (
|
|
230
232
|
<ScrollView
|
|
231
233
|
scrollX
|
|
232
234
|
scrollY
|
|
233
235
|
scrollWithAnimation
|
|
234
236
|
enhanced
|
|
235
237
|
showScrollbar={false}
|
|
236
238
|
{...otherProps}
|
|
237
239
|
className={classNames(
|
|
238
240
|
className,
|
|
239
241
|
{
|
|
240
242
|
[customScrollViewStyle['d-custom-ios-mini-extend-border-radius']]:
|
|
241
243
|
isIosDevice && isWxMin && scrollX && style['borderRadius'],
|
|
242
244
|
},
|
|
243
245
|
{
|
|
244
246
|
[customScrollViewStyle['d-custom-ios-h5-extend-border-radius']]: isIosDevice,
|
|
245
247
|
},
|
|
246
248
|
{
|
|
247
249
|
[customScrollViewStyle['d-custom-mini-hide-scroll']]: isWxMin,
|
|
248
250
|
},
|
|
249
251
|
)}
|
|
250
252
|
style={style}
|
|
251
253
|
>
|
|
252
254
|
{children}
|
|
253
255
|
</ScrollView>
|
|
254
256
|
);
|
|
255
257
|
}
|