Skip to content

Commit a3bf029

Browse files
authored
【imagePreview】disableDefault支持动态修改,修复md文档中的错误 (DevCloudFE#21)
* fix: 修复alert设置dismissTimer后提前点击close报错,空样式等问题。 * fix: imagePreview的disableDefault支持动态修改,修复md文档中的错误
1 parent d18e4b1 commit a3bf029

File tree

3 files changed

+47
-25
lines changed

3 files changed

+47
-25
lines changed

packages/devui-vue/devui/image-preview/src/image-preview-directive.ts

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { BindingTypes, ImagePreviewProps } from './image-preview-types'
1+
import { BindingTypes, ImagePreviewProps, UpdateBindingTypes } from './image-preview-types'
22
import ImagePreviewService from './image-preview-service'
33

44
interface PreviewHTMLElement extends HTMLElement {
@@ -24,24 +24,27 @@ function getImgByEl(el: HTMLElement): Array<string> {
2424
)
2525
return urlList
2626
}
27-
2827
function handleImgByEl(el: PreviewHTMLElement) {
29-
el.addEventListener('click', (e: MouseEvent) => {
30-
e.stopPropagation()
31-
const target = e.target as PreviewHTMLElement
32-
if (target?.nodeName?.toLowerCase() === 'img') {
33-
const urlList = getImgByEl(el)
34-
const url = target.getAttribute('src')
35-
mountedPreviewImages({
36-
url,
37-
previewUrlList: urlList,
38-
zIndex: el?.zIndex,
39-
backDropZIndex: el?.backDropZIndex
40-
})
41-
}
42-
})
28+
el.addEventListener('click', handleImg)
29+
}
30+
function removeHandle(el: PreviewHTMLElement) {
31+
el.removeEventListener('click', handleImg)
32+
}
33+
function handleImg(e: MouseEvent) {
34+
e.stopPropagation()
35+
const el = e.currentTarget as PreviewHTMLElement
36+
const target = e.target as PreviewHTMLElement
37+
if (target?.nodeName?.toLowerCase() === 'img') {
38+
const urlList = getImgByEl(el)
39+
const url = target.getAttribute('src')
40+
mountedPreviewImages({
41+
url,
42+
previewUrlList: urlList,
43+
zIndex: el?.zIndex,
44+
backDropZIndex: el?.backDropZIndex
45+
})
46+
}
4347
}
44-
4548
export default {
4649
mounted(el: PreviewHTMLElement, binding: BindingTypes | undefined) {
4750
if (!binding.value) {
@@ -69,8 +72,22 @@ export default {
6972
unmounted() {
7073
unmountedPreviewImages()
7174
},
72-
updated(el: PreviewHTMLElement, binding) {
75+
updated(el: PreviewHTMLElement, binding: UpdateBindingTypes | undefined) {
7376
el.zIndex = binding.value?.zIndex
7477
el.backDropZIndex = binding.value?.backDropZIndex
78+
79+
if (binding.value) {
80+
const {
81+
value: { disableDefault },
82+
oldValue: { disableDefault: oldDisableDefault }
83+
} = binding
84+
if (disableDefault !== oldDisableDefault) {
85+
if (disableDefault) {
86+
removeHandle(el)
87+
} else {
88+
handleImgByEl(el)
89+
}
90+
}
91+
}
7592
}
7693
}

packages/devui-vue/devui/image-preview/src/image-preview-types.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,7 @@ export interface BindingTypes {
3030
}
3131
[key: string]: any
3232
}
33-
33+
export interface UpdateBindingTypes extends BindingTypes {
34+
oldValue: BindingTypes['value']
35+
}
3436
export type ImagePreviewProps = ExtractPropTypes<typeof imagePreviewProps>

packages/devui-vue/docs/components/image-preview/index.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,10 @@ export default defineComponent({
9999
</d-radio-group>
100100
<span class="text">backDropZIndex: {{ backDropZIndex }}</span>
101101
</div>
102-
<div v-d-image-preview="{ zIndex, backDropZIndex }" class="devui-image-preview-demo">
102+
<div
103+
v-d-image-preview="{ zIndex: Number(zIndex), backDropZIndex: Number(backDropZIndex) }"
104+
class="devui-image-preview-demo"
105+
>
103106
<img v-for="src in imageList" :src="src" :key="src" />
104107
</div>
105108
</template>
@@ -111,10 +114,10 @@ export default defineComponent({
111114
'https://devui.design/components/assets/image1.png',
112115
'https://devui.design/components/assets/image3.png'
113116
])
114-
const zIndexList = ref([1000, 1050, 1100])
115-
const backDropZIndexList = ref([900, 1040, 1000])
116-
const zIndex = ref(1050)
117-
const backDropZIndex = ref(1040)
117+
const zIndexList = ref(['1000', '1050', '1100'])
118+
const backDropZIndexList = ref(['900', '1040', '1000'])
119+
const zIndex = ref('1050')
120+
const backDropZIndex = ref('1040')
118121
119122
return {
120123
imageList,
@@ -136,7 +139,7 @@ export default defineComponent({
136139
| :------------: | :-------: | :---: | :------------------------------------------------------------ |
137140
| custom | `Object` | -- | 可选,指令会自动注入 open 方法,通过 custom.open 开启预览窗口 |
138141
| disableDefault | `Boolean` | false | 可选,关闭默认点击触发图片预览方式 |
139-
| zIndex | `Number` | 1050 | 可选,可选,设置预览时图片的 z-index 值 |
142+
| zIndex | `Number` | 1050 | 可选,设置预览时图片的 z-index 值 |
140143
| backDropZIndex | `Number` | 1040 | 可选,设置预览时图片背景的 z-index 值 |
141144

142145
<style lang="scss">

0 commit comments

Comments
 (0)