add input item to UI index
This commit is contained in:
parent
7773bedff5
commit
0a3bf4ca42
3 changed files with 125 additions and 137 deletions
|
|
@ -72,10 +72,11 @@ import { defineComponent, computed, onMounted, ref, reactive } from 'vue';
|
||||||
const contentTag = ref(`content${msgID.value}`);
|
const contentTag = ref(`content${msgID.value}`);
|
||||||
let bubble: any;
|
let bubble: any;
|
||||||
let content: any;
|
let content: any;
|
||||||
|
console.log(props)
|
||||||
|
|
||||||
const textFill = computed(() => {
|
const textFill = computed(() => {
|
||||||
switch (props.item.modifier) {
|
switch (props.item.modifier) {
|
||||||
case "ai":
|
case "ai" || "sf":
|
||||||
return "#fff";
|
return "#fff";
|
||||||
default:
|
default:
|
||||||
return "#000";
|
return "#000";
|
||||||
|
|
|
||||||
|
|
@ -37,24 +37,24 @@
|
||||||
</clipPath>
|
</clipPath>
|
||||||
</defs>
|
</defs>
|
||||||
<g id="cardsDiv">
|
<g id="cardsDiv">
|
||||||
<g
|
<g
|
||||||
v-for="(item, index) in renderArr"
|
v-for="(item, index) in renderArr"
|
||||||
:key="index"
|
:key="index"
|
||||||
id="cards"
|
id="cards"
|
||||||
transform="translate(0, 0)"
|
transform="translate(0, 0)"
|
||||||
|
>
|
||||||
|
<transition
|
||||||
|
appear
|
||||||
|
v-on:before-appear="beforeEnter"
|
||||||
|
v-on:appear="enter"
|
||||||
|
v-on:appear-cancelled="leave"
|
||||||
>
|
>
|
||||||
<transition
|
<MessageItem
|
||||||
appear
|
:item="item"
|
||||||
v-on:before-appear="beforeEnter"
|
:key="index"
|
||||||
v-on:appear="enter"
|
/>
|
||||||
v-on:appear-cancelled="leave"
|
</transition>
|
||||||
>
|
</g>
|
||||||
<MessageItem
|
|
||||||
:item="item"
|
|
||||||
:key="index"
|
|
||||||
/>
|
|
||||||
</transition>
|
|
||||||
</g>
|
|
||||||
</g>
|
</g>
|
||||||
<g id="titlebar" transform="translate(0, 0)">
|
<g id="titlebar" transform="translate(0, 0)">
|
||||||
<g data-name="Group 73" transform="translate(20 20)">
|
<g data-name="Group 73" transform="translate(20 20)">
|
||||||
|
|
@ -84,117 +84,111 @@
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent, inject, onMounted, reactive } from "vue";
|
import { defineComponent, inject, onMounted, reactive } from "vue";
|
||||||
import MessageItem from './UIDetails/messageItem.vue';
|
import MessageItem from './UIDetails/messageItem.vue';
|
||||||
import Messages from "./UIDetails/messages";
|
import InputItem from "@/components/UI/UIDetails/inputItem.vue";
|
||||||
export default defineComponent({
|
import Messages from "./UIDetails/messages";
|
||||||
name: 'UIindex',
|
export default defineComponent({
|
||||||
components: { MessageItem },
|
name: 'UIindex',
|
||||||
setup() {
|
components: { MessageItem, InputItem },
|
||||||
|
setup() {
|
||||||
interface ProtectedRef {
|
const anime: object | any = inject('animejs');
|
||||||
readonly el: SVGElement | HTMLElement;
|
const timeline: typeof anime = anime.timeline({ loop: true });
|
||||||
reference: any;
|
const renderArr: Message[] = reactive([])
|
||||||
height: number | null;
|
const messages = Messages;
|
||||||
|
const msgOffset = {
|
||||||
|
x: 0 ,
|
||||||
|
y: 0
|
||||||
}
|
}
|
||||||
const anime: object | any = inject('animejs');
|
let messenger: any;
|
||||||
const timeline: typeof anime = anime.timeline({ loop: true });
|
let winW: number;
|
||||||
const renderArr: Message[] = reactive([])
|
let modifier: string;
|
||||||
const messages = Messages;
|
let msg: any;
|
||||||
const msgOffset = {
|
let cardsDiv: any;
|
||||||
x: 0 ,
|
let prevCardH = 0;
|
||||||
y: 0
|
|
||||||
}
|
|
||||||
let messenger: any;
|
|
||||||
let winW: number;
|
|
||||||
let modifier: string;
|
|
||||||
let msg: any;
|
|
||||||
let cardsDiv: any;
|
|
||||||
let prevCardH = 0;
|
|
||||||
|
|
||||||
function renderMsg(i: number): void {
|
function renderMsg(i: number): void {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
renderArr.push(messages[i]);
|
renderArr.push(messages[i]);
|
||||||
}, 2000);
|
}, 2000);
|
||||||
}
|
}
|
||||||
|
|
||||||
function runAnim(): void {
|
function runAnim(): void {
|
||||||
for (let i = 0; i < messages.length; i++) {
|
for (let i = 0; i < messages.length; i++) {
|
||||||
renderMsg(i);
|
renderMsg(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function beforeEnter(el: any) {
|
async function beforeEnter(el: any) {
|
||||||
modifier = el.className.baseVal.substring(0, 2);
|
modifier = el.className.baseVal.substring(0, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function enter(el: any, done: any) {
|
async function enter(el: any, done: any) {
|
||||||
const paddingLeft = 40;
|
const paddingLeft = 40;
|
||||||
msg = await document.getElementById(el.id);
|
msg = await document.getElementById(el.id);
|
||||||
const rect = msg.getBoundingClientRect();
|
const rect = msg.getBoundingClientRect();
|
||||||
const msgW = rect.width;
|
const msgW = rect.width;
|
||||||
const msgH = rect.height;
|
const msgH = rect.height;
|
||||||
cardsDiv = await document.getElementById("cardsDiv");
|
cardsDiv = await document.getElementById("cardsDiv");
|
||||||
const cdBox = cardsDiv.getBBox();
|
const cdBox = cardsDiv.getBBox();
|
||||||
|
|
||||||
if (prevCardH === 0) {
|
if (prevCardH === 0) {
|
||||||
msgOffset.y += cdBox.height;
|
msgOffset.y += cdBox.height;
|
||||||
} else if (prevCardH > msgH) {
|
} else if (prevCardH > msgH) {
|
||||||
// cardsDiv is offset by 17.5
|
// cardsDiv is offset by 17.5
|
||||||
msgOffset.y += prevCardH + msgH / 2 + 17.5;
|
msgOffset.y += prevCardH + msgH / 2 + 17.5;
|
||||||
} else {
|
} else {
|
||||||
msgOffset.y += cdBox.height - 20;
|
msgOffset.y += cdBox.height - 20;
|
||||||
}
|
}
|
||||||
prevCardH = msgH;
|
prevCardH = msgH;
|
||||||
|
|
||||||
switch (modifier) {
|
switch (modifier) {
|
||||||
case "sf":
|
case "sf":
|
||||||
msgOffset.x = winW - msgW;
|
msgOffset.x = winW - msgW;
|
||||||
break;
|
break;
|
||||||
case "ai":
|
case "ai":
|
||||||
msgOffset.x = (winW - msgW) / 2;
|
msgOffset.x = (winW - msgW) / 2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
msgOffset.x = paddingLeft;
|
msgOffset.x = paddingLeft;
|
||||||
}
|
}
|
||||||
|
|
||||||
const translateUp = `translate(${msgOffset.x} ${msgOffset.y})`;
|
const translateUp = `translate(${msgOffset.x} ${msgOffset.y})`;
|
||||||
const translateDown = `translate(${msgOffset.x} ${msgOffset.y + 5})`;
|
const translateDown = `translate(${msgOffset.x} ${msgOffset.y + 5})`;
|
||||||
timeline
|
timeline
|
||||||
.add({
|
.add({
|
||||||
targets: el,
|
targets: el,
|
||||||
transform: translateUp,
|
transform: translateUp,
|
||||||
easing: "easeInOutQuad",
|
easing: "easeInOutQuad",
|
||||||
duration: 1000
|
duration: 1000
|
||||||
})
|
})
|
||||||
.add({
|
.add({
|
||||||
targets: el,
|
targets: el,
|
||||||
transform: translateDown,
|
transform: translateDown,
|
||||||
easing: "easeInOutQuad",
|
easing: "easeInOutQuad",
|
||||||
duration: 500,
|
duration: 500,
|
||||||
offset: 1000
|
offset: 1000
|
||||||
});
|
});
|
||||||
done();
|
done();
|
||||||
}
|
}
|
||||||
|
|
||||||
function leave() {
|
function leave() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
messenger = document.getElementById('messenger');
|
messenger = document.getElementById('messenger');
|
||||||
winW = messenger.clientWidth;
|
winW = messenger.clientWidth;
|
||||||
runAnim();
|
runAnim();
|
||||||
});
|
});
|
||||||
return {
|
return {
|
||||||
// timeline,
|
renderArr,
|
||||||
renderArr,
|
msgOffset,
|
||||||
msgOffset,
|
beforeEnter,
|
||||||
beforeEnter,
|
enter,
|
||||||
enter,
|
leave
|
||||||
leave
|
}
|
||||||
}
|
},
|
||||||
},
|
});
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,18 @@
|
||||||
<template>
|
<template>
|
||||||
<!-- <UIindex />
|
<UIindex />
|
||||||
<Microphone /> -->
|
|
||||||
<InputItem />
|
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent, inject } from 'vue';
|
import { defineComponent, inject } from 'vue';
|
||||||
// import UIindex from "@/components/UI/index.vue";
|
import UIindex from "@/components/UI/index.vue";
|
||||||
// import Microphone from "@/components/microphone/index.vue";
|
// import Microphone from "@/components/microphone/index.vue";
|
||||||
import InputItem from "@/components/UI/UIDetails/inputItem.vue";
|
|
||||||
|
|
||||||
export default defineComponent({
|
|
||||||
name: "HomeIndex",
|
|
||||||
components: { InputItem },
|
|
||||||
setup() {
|
|
||||||
const emitter: any = inject("mitt");
|
|
||||||
emitter.on('newSelfMessage', (payload: any) => console.log('foo', payload) )
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
name: "HomeIndex",
|
||||||
|
components: { UIindex },
|
||||||
|
setup() {
|
||||||
|
const emitter: any = inject("mitt");
|
||||||
|
emitter.on('newSelfMessage', (payload: any) => console.log('foo', payload) )
|
||||||
|
}
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style></style>
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue