79 lines
1.4 KiB
Vue
79 lines
1.4 KiB
Vue
<template>
|
||
<view class="tm-position relative ">
|
||
<view class="tm-position-content">
|
||
<slot name="default"></slot>
|
||
</view>
|
||
<view :style="{
|
||
top:position_s.top==true?0:'null'+'px',
|
||
bottom:position_s.bottom==true?0:'null'+'px',
|
||
transform:`translateY(${offset[1]}px) translateX(${offset[0]}px)`,
|
||
|
||
}" class="tm-position-body absolute" :class="[
|
||
position_s.left?'flex-start':'',
|
||
position_s.right?'flex-end':'',
|
||
]" >
|
||
<slot name="position"></slot>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
/**
|
||
* 定位组件
|
||
* @property {Object} position = [] 位置{top:false,left:false,right:false,bottom:false}
|
||
* @property {Array} offset = [] 默认:[0,0],偏移x,y
|
||
*/
|
||
export default {
|
||
name:"tm-position",
|
||
props:{
|
||
position:{
|
||
type:Object,
|
||
default:()=>{
|
||
return {};
|
||
}
|
||
},
|
||
offset:{
|
||
type:Array,
|
||
default:()=>{
|
||
return [0,0];
|
||
}
|
||
},
|
||
|
||
},
|
||
computed:{
|
||
position_s:function(){
|
||
let p = {
|
||
top:false,
|
||
left:false,
|
||
right:false,
|
||
bottom:false
|
||
};
|
||
return {...p,...this.position}
|
||
},
|
||
},
|
||
data() {
|
||
return {
|
||
height:0
|
||
};
|
||
},
|
||
async mounted() {
|
||
// this.$nextTick(async function(){
|
||
// let syinfo = await this.$Querey('.tm-position-content',this).catch(e=>{})
|
||
// console.log(syinfo);
|
||
// this.height = syinfo[0].height;
|
||
// })
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="less">
|
||
.tm-position{
|
||
.tm-position-body{
|
||
width: 100%;
|
||
}
|
||
.tm-position-content{
|
||
|
||
}
|
||
}
|
||
</style>
|