update
This commit is contained in:
parent
f135829a99
commit
59cfc3dc6f
|
@ -0,0 +1,42 @@
|
||||||
|
<template>
|
||||||
|
<div class="animation-index">
|
||||||
|
<div class="index" v-for="(item, index) in animations" :key="index">
|
||||||
|
{{index}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { PropType } from 'vue'
|
||||||
|
import { PPTAnimation } from '@/types/slides'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'animation-index',
|
||||||
|
props: {
|
||||||
|
animations: {
|
||||||
|
type: Array as PropType<PPTAnimation[]>,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.animation-index {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: -22px;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
.index {
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
background-color: #fff;
|
||||||
|
color: #333;
|
||||||
|
border: 1px solid #666;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 3px;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,81 @@
|
||||||
|
<template>
|
||||||
|
<div :class="['border-line', type, { 'wide': isWide }]"></div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { PropType } from 'vue'
|
||||||
|
|
||||||
|
type BorderLineType = 't' | 'b' | 'l' | 'r'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'border-line',
|
||||||
|
props: {
|
||||||
|
type: {
|
||||||
|
type: String as PropType<BorderLineType>,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
isWide: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.border-line {
|
||||||
|
position: absolute;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
border: 0 dashed $themeColor;
|
||||||
|
|
||||||
|
&.t {
|
||||||
|
border-top-width: 1px;
|
||||||
|
}
|
||||||
|
&.b {
|
||||||
|
border-bottom-width: 1px;
|
||||||
|
}
|
||||||
|
&.l {
|
||||||
|
border-left-width: 1px;
|
||||||
|
}
|
||||||
|
&.r {
|
||||||
|
border-right-width: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.wide {
|
||||||
|
&::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
background: transparent;
|
||||||
|
cursor: move;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.t::before {
|
||||||
|
top: -8px;
|
||||||
|
left: -8px;
|
||||||
|
width: calc(100% + 16px);
|
||||||
|
height: 16px;
|
||||||
|
}
|
||||||
|
&.b::before {
|
||||||
|
bottom: -8px;
|
||||||
|
left: -8px;
|
||||||
|
width: calc(100% + 16px);
|
||||||
|
height: 16px;
|
||||||
|
}
|
||||||
|
&.l::before {
|
||||||
|
top: -8px;
|
||||||
|
left: -8px;
|
||||||
|
width: 16px;
|
||||||
|
height: calc(100% + 16px);
|
||||||
|
}
|
||||||
|
&.r::before {
|
||||||
|
top: -8px;
|
||||||
|
right: -8px;
|
||||||
|
width: 16px;
|
||||||
|
height: calc(100% + 16px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,61 @@
|
||||||
|
<template>
|
||||||
|
<div :class="['resizable-point', type]"></div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { PropType } from 'vue'
|
||||||
|
|
||||||
|
type ResizablePointType = 't-l' | 't-c' | 't-r' | 'm-l' | 'm-r' | 'b-l' | 'b-c' | 'b-r' | 'any'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'resizable-point',
|
||||||
|
props: {
|
||||||
|
type: {
|
||||||
|
type: String as PropType<ResizablePointType>,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.resizable-point {
|
||||||
|
position: absolute;
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
margin: -5px 0 0 -5px;
|
||||||
|
border: 1px solid #666;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 50%;
|
||||||
|
|
||||||
|
&.t-l {
|
||||||
|
cursor: nwse-resize;
|
||||||
|
}
|
||||||
|
&.t-c {
|
||||||
|
cursor: ns-resize;
|
||||||
|
}
|
||||||
|
&.t-r {
|
||||||
|
cursor: nesw-resize;
|
||||||
|
}
|
||||||
|
&.m-l {
|
||||||
|
cursor: ew-resize;
|
||||||
|
}
|
||||||
|
&.m-r {
|
||||||
|
cursor: ew-resize;
|
||||||
|
}
|
||||||
|
&.b-l {
|
||||||
|
cursor: nesw-resize;
|
||||||
|
}
|
||||||
|
&.b-c {
|
||||||
|
cursor: ns-resize;
|
||||||
|
}
|
||||||
|
&.b-r {
|
||||||
|
cursor: nwse-resize;
|
||||||
|
}
|
||||||
|
&.any {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,32 @@
|
||||||
|
<template>
|
||||||
|
<div class="rotate-handle">
|
||||||
|
<div class="rotate-icon"><IconFont type="icon-rotate" /></div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'rotate-handle',
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.rotate-handle {
|
||||||
|
position: absolute;
|
||||||
|
top: -24px;
|
||||||
|
margin: -12px 0 0 -12px;
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
background-color: #333;
|
||||||
|
border-radius: 50%;
|
||||||
|
color: #fff;
|
||||||
|
|
||||||
|
.rotate-icon {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in New Issue