Merge branch 'scroll_animation' into 'master'
add scroll functionality v1 See merge request crimata-ai/crimata-electron!8
This commit is contained in:
commit
02f2db6705
3 changed files with 73 additions and 27 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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({
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue