92 lines
2.0 KiB
Vue
92 lines
2.0 KiB
Vue
|
|
<template>
|
|||
|
|
<view class="iframe" :style="{height: formProps.height + 'px', width: '100%'}">
|
|||
|
|
<web-view v-if="show" :webview-styles="webviewStyles" :fullscreen="false" :src="formProps.url"
|
|||
|
|
:style="{height: formProps.height + 'px', width: '100%'}" class="w-iframe" scrolling="auto"
|
|||
|
|
frameborder="0"></web-view>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script setup>
|
|||
|
|
import { ref, computed, onMounted } from 'vue'
|
|||
|
|
import { onUnload } from "@dcloudio/uni-app";
|
|||
|
|
|
|||
|
|
const props = defineProps({
|
|||
|
|
formProps: {
|
|||
|
|
type: Object,
|
|||
|
|
default: () => {
|
|||
|
|
return {}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
modelValue: String,
|
|||
|
|
readonly: Boolean
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
const show = ref(true)
|
|||
|
|
|
|||
|
|
const webviewStyles = ref({
|
|||
|
|
progress: {
|
|||
|
|
color: '#FF3333'
|
|||
|
|
},
|
|||
|
|
width: '100%',
|
|||
|
|
height: props.formProps.height + 'px',
|
|||
|
|
position: 'absolute' //"static",
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
uni.$on('wv:scorll', () => {
|
|||
|
|
reloadPos(pos => {
|
|||
|
|
webviewStyles.value.top = pos.top;
|
|||
|
|
})
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
uni.$on('hideFp', () => {
|
|||
|
|
show.value = false
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
uni.$on('showFp', () => {
|
|||
|
|
show.value = true
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
onUnload(() => {
|
|||
|
|
uni.$off('wv:scorll')
|
|||
|
|
uni.$off('showFp')
|
|||
|
|
uni.$off('hideFp')
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
onMounted(() => {
|
|||
|
|
reloadPos(pos => {
|
|||
|
|
webviewStyles.value.top = pos.top;
|
|||
|
|
})
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
|
|||
|
|
function reloadPos(callback) {
|
|||
|
|
// #ifdef APP-VUE
|
|||
|
|
const view = uni.createSelectorQuery().in(this).select('.iframe')
|
|||
|
|
view.fields({ size: true, rect: true }, ({ height, width, top, left, right, bottom }) => {
|
|||
|
|
uni.createSelectorQuery().selectViewport().scrollOffset(({ scrollTop }) => {
|
|||
|
|
return callback({
|
|||
|
|
top: parseInt(top) + parseInt(scrollTop) + 40 + 'px',
|
|||
|
|
left: parseInt(left) + 'px',
|
|||
|
|
width: parseInt(width) + 'px',
|
|||
|
|
height: parseInt(height) + 'px'
|
|||
|
|
})
|
|||
|
|
}).exec()
|
|||
|
|
}).exec()
|
|||
|
|
// #endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
// #ifdef H5
|
|||
|
|
//在h5下使用js去除iframe边框,style设置居然不能生效
|
|||
|
|
onMounted(() => {
|
|||
|
|
const iframe = document.getElementsByTagName('iframe')
|
|||
|
|
for (let im of iframe) {
|
|||
|
|
im.setAttribute('frameborder', 0)
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
// #endif
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style lang="less" scoped>
|
|||
|
|
|
|||
|
|
</style>
|