Merge branch 'scroll_animation' into 'master'

add scroll functionality v1

See merge request crimata-ai/crimata-electron!8
This commit is contained in:
Enrique Hernandez 2020-11-21 16:14:59 +00:00
commit 02f2db6705
3 changed files with 73 additions and 27 deletions

View file

@ -33,7 +33,7 @@ protocol.registerSchemesAsPrivileged([
function createWindow() { function createWindow() {
// Create the browser window. // Create the browser window.
win = new BrowserWindow({ win = new BrowserWindow({
width: 800, width: 650,
height: 1200, height: 1200,
webPreferences: { webPreferences: {
// Use pluginOptions.nodeIntegration, leave this alone // Use pluginOptions.nodeIntegration, leave this alone

View file

@ -103,14 +103,12 @@ export default defineComponent({
watch(think, async (think, prevThink) => { watch(think, async (think, prevThink) => {
if (think) { if (think) {
console.log("think", think);
anime({ anime({
targets: gradient, targets: gradient,
cy: "0.7", cy: "0.7",
}); });
thinkAnimation.play(); thinkAnimation.play();
} else { } else {
console.log("stop think");
thinkAnimation.pause(); thinkAnimation.pause();
// thinkAnimation.reset(); // thinkAnimation.reset();
anime({ anime({

View file

@ -1,34 +1,42 @@
<template> <template>
<svg <svg
version="1.1" version="1.1"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 350 500" :viewBox="testBox"
> >
<g id="messageRenderer"> <g id="messageRenderer">
<g <g
v-for="(item, index) in renderArr" v-for="(item, index) in renderArr"
:key="index" :key="index"
:id="index" :id="index"
class="messageList" class="messageList"
transform="translate(0, 0)" transform="translate(0, 0)"
>
<transition
appear
v-on:before-appear="beforeEnter"
v-on:appear="enter"
v-on:after-enter="afterEnter"
> >
<MessageItem :item="item" :key="index" /> <transition
</transition> appear
v-on:before-appear="beforeEnter"
v-on:appear="enter"
v-on:after-enter="afterEnter"
>
<MessageItem :item="item" :key="index" />
</transition>
</g>
</g> </g>
</g> </svg>
</svg>
</template> </template>
<script lang="ts"> <script lang="ts">
import useMessageRenderer from "@/composables/messageRenderer/useMessageRenderer"; import useMessageRenderer from "@/composables/messageRenderer/useMessageRenderer";
import { defineComponent, reactive, ref, inject } from "vue"; import {
defineComponent,
reactive,
ref,
inject,
computed,
onMounted,
render,
} from "vue";
import MessageItem from "./messageItem.vue"; import MessageItem from "./messageItem.vue";
import { Message } from "@/types/message/index"; import { Message } from "@/types/message/index";
import { Mitt } from "@/types/mitt/index"; import { Mitt } from "@/types/mitt/index";
@ -37,6 +45,45 @@ export default defineComponent({
components: { MessageItem }, components: { MessageItem },
setup() { setup() {
const renderArr: Message[] = reactive([]); const renderArr: Message[] = reactive([]);
const scroll = ref(0);
let renderer: any;
const rendererHeight = ref(0);
let topBound: number;
const clampedScroll = computed(() => {
const test = rendererHeight.value;
if (test === 0) { return 0; }
topBound = -test + 440;
return Math.max(topBound, Math.min(scroll.value, 0)) as number;
})
const testBox = computed(() => {
if (clampedScroll.value === 0) {
scroll.value = 0;
} else if (clampedScroll.value === topBound) {
scroll.value = topBound;
}
return `0 ${clampedScroll.value} 350 500`;
});
onMounted(() => {
renderer = document.getElementById("messageRenderer");
});
window.addEventListener(
"wheel",
(e) => {
if (renderer) {
// get renderer height
rendererHeight.value = renderer.getBoundingClientRect().height;
// only scroll if renderer height is greater than main window
if (rendererHeight.value > 500) {
scroll.value += e.deltaY * 0.25;
}
}
},
{ passive: true }
);
// imports mitt Emitter safely // imports mitt Emitter safely
let emitter: Mitt; let emitter: Mitt;
@ -55,6 +102,7 @@ export default defineComponent({
beforeEnter, beforeEnter,
enter, enter,
afterEnter, afterEnter,
testBox,
}; };
}, },
}); });