You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
225 lines
5.8 KiB
Vue
225 lines
5.8 KiB
Vue
<template>
|
|
<div
|
|
class="border-box"
|
|
:style="{
|
|
backgroundColor: customize.backgroundColor
|
|
}"
|
|
>
|
|
<div
|
|
v-if="customize.diagonalType === 'leftTopRightBottom'"
|
|
class="left-diagonal"
|
|
>
|
|
<div
|
|
class="top"
|
|
:style="{
|
|
width: customize.borderLength + 'px',
|
|
height: customize.borderWidth + 'px',
|
|
borderTopRightRadius: customize.borderRadius + 'px',
|
|
borderBottomRightRadius: customize.borderRadius + 'px',
|
|
backgroundColor: customize.borderColor
|
|
}"
|
|
/>
|
|
<div
|
|
class="left"
|
|
:style="{
|
|
width: customize.borderLength + 'px',
|
|
height: customize.borderWidth + 'px',
|
|
borderTopRightRadius: customize.borderRadius + 'px',
|
|
borderBottomRightRadius: customize.borderRadius + 'px',
|
|
backgroundColor: customize.borderColor
|
|
}"
|
|
/>
|
|
<div
|
|
class="right"
|
|
:style="{
|
|
width: customize.borderLength + 'px',
|
|
height: customize.borderWidth + 'px',
|
|
borderTopLeftRadius: customize.borderRadius + 'px',
|
|
borderBottomLeftRadius: customize.borderRadius + 'px',
|
|
backgroundColor: customize.borderColor
|
|
}"
|
|
/>
|
|
<div
|
|
class="bottom"
|
|
:style="{
|
|
width: customize.borderLength + 'px',
|
|
height: customize.borderWidth + 'px',
|
|
borderTopLeftRadius: customize.borderRadius + 'px',
|
|
borderBottomLeftRadius: customize.borderRadius + 'px',
|
|
backgroundColor: customize.borderColor
|
|
}"
|
|
/>
|
|
</div>
|
|
<div
|
|
v-if="customize.diagonalType === 'rightTopLeftBottom'"
|
|
class="right-diagonal"
|
|
>
|
|
<div
|
|
class="top"
|
|
:style="{
|
|
width: customize.borderLength + 'px',
|
|
height: customize.borderWidth + 'px',
|
|
borderTopLeftRadius: customize.borderRadius + 'px',
|
|
borderBottomLeftRadius: customize.borderRadius + 'px',
|
|
backgroundColor: customize.borderColor
|
|
}"
|
|
/>
|
|
<div
|
|
class="right"
|
|
:style="{
|
|
width: customize.borderLength + 'px',
|
|
height: customize.borderWidth + 'px',
|
|
borderTopLeftRadius: customize.borderRadius + 'px',
|
|
borderBottomLeftRadius: customize.borderRadius + 'px',
|
|
backgroundColor: customize.borderColor
|
|
}"
|
|
/>
|
|
<div
|
|
class="left"
|
|
:style="{
|
|
width: customize.borderLength + 'px',
|
|
height: customize.borderWidth + 'px',
|
|
borderTopRightRadius: customize.borderRadius + 'px',
|
|
borderBottomRightRadius: customize.borderRadius + 'px',
|
|
backgroundColor: customize.borderColor
|
|
}"
|
|
/>
|
|
<div
|
|
class="bottom"
|
|
:style="{
|
|
width: customize.borderLength + 'px',
|
|
height: customize.borderWidth + 'px',
|
|
borderTopRightRadius: customize.borderRadius + 'px',
|
|
borderBottomRightRadius: customize.borderRadius + 'px',
|
|
backgroundColor: customize.borderColor
|
|
}"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
|
|
export default {
|
|
name: 'DiagonalBorder',
|
|
components: {
|
|
},
|
|
props: {
|
|
config: {
|
|
type: Object,
|
|
default: () => ({})
|
|
}
|
|
},
|
|
data () {
|
|
return {
|
|
}
|
|
},
|
|
computed: {
|
|
option () {
|
|
return this.config.option
|
|
},
|
|
optionData () {
|
|
return this.option.data
|
|
},
|
|
customize () {
|
|
return this.option.customize
|
|
}
|
|
},
|
|
mounted () {
|
|
if (this.customize.diagonalType === 'leftTopRightBottom') {
|
|
const leftDiagonal = document.querySelector('.left-diagonal').querySelector('.left')
|
|
const rightDiagonal = document.querySelector('.left-diagonal').querySelector('.right')
|
|
leftDiagonal.style.left = `${this.customize.borderWidth / 2}px`
|
|
leftDiagonal.style.top = `${this.customize.borderWidth / 2}px`
|
|
rightDiagonal.style.right = `${this.customize.borderWidth / 2}px`
|
|
rightDiagonal.style.bottom = `${this.customize.borderWidth / 2}px`
|
|
} else {
|
|
const leftDiagonal = document.querySelector('.right-diagonal').querySelector('.left')
|
|
const rightDiagonal = document.querySelector('.right-diagonal').querySelector('.right')
|
|
leftDiagonal.style.left = `${this.customize.borderWidth / 2}px`
|
|
leftDiagonal.style.bottom = `${this.customize.borderWidth / 2}px`
|
|
rightDiagonal.style.right = `${this.customize.borderWidth / 2}px`
|
|
rightDiagonal.style.top = `${this.customize.borderWidth / 2}px`
|
|
}
|
|
},
|
|
methods: { }
|
|
}
|
|
</script>
|
|
<style lang="scss" scoped>
|
|
.border-box {
|
|
width: 100%;
|
|
height: 100%;
|
|
position: relative;
|
|
|
|
.left-diagonal {
|
|
.top {
|
|
box-sizing: border-box;
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
}
|
|
|
|
// 顺时针旋转90度
|
|
.left {
|
|
box-sizing: border-box;
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
transform: rotate(90deg);
|
|
transform-origin: left;
|
|
}
|
|
|
|
.right {
|
|
box-sizing: border-box;
|
|
position: absolute;
|
|
bottom: 0;
|
|
right: 0;
|
|
transform: rotate(90deg);
|
|
transform-origin: right;
|
|
}
|
|
|
|
.bottom {
|
|
box-sizing: border-box;
|
|
position: absolute;
|
|
bottom: 0;
|
|
right: 0;
|
|
transform-origin: right;
|
|
}
|
|
}
|
|
|
|
.right-diagonal {
|
|
.top {
|
|
box-sizing: border-box;
|
|
position: absolute;
|
|
top: 0;
|
|
right: 0;
|
|
}
|
|
|
|
.right {
|
|
box-sizing: border-box;
|
|
position: absolute;
|
|
top: 0;
|
|
right: 0;
|
|
transform: rotate(-90deg);
|
|
transform-origin: right;
|
|
}
|
|
|
|
.left {
|
|
box-sizing: border-box;
|
|
position: absolute;
|
|
bottom: 0;
|
|
left: 0;
|
|
transform: rotate(-90deg);
|
|
transform-origin: left;
|
|
}
|
|
|
|
.bottom {
|
|
box-sizing: border-box;
|
|
position: absolute;
|
|
bottom: 0;
|
|
left: 0;
|
|
transform-origin: left;
|
|
}
|
|
}
|
|
}
|
|
</style>
|