@canvas3/nuxt 0.1.33 → 0.1.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/module.json +1 -1
- package/dist/runtime/directives/canvas3-image.client.js +2 -2
- package/dist/runtime/directives/canvas3-scroll-action.js +1 -20
- package/dist/runtime/layouts/canvas3-layout.vue +2 -1
- package/dist/runtime/types/types.d.ts +4 -10
- package/dist/runtime/utils/canvas3/canvas3.d.ts +4 -5
- package/dist/runtime/utils/canvas3/canvas3.js +31 -41
- package/dist/runtime/utils/canvas3/helpers.d.ts +1 -7
- package/dist/runtime/utils/canvas3/helpers.js +0 -19
- package/dist/runtime/utils/exports.d.ts +4 -2
- package/dist/runtime/utils/exports.js +5 -1
- package/package.json +1 -1
package/dist/module.json
CHANGED
|
@@ -93,13 +93,13 @@ export const vCanvas3Image = {
|
|
|
93
93
|
const stop = watch(
|
|
94
94
|
() => Canvas3.canvasInitiated.value,
|
|
95
95
|
(ready) => {
|
|
96
|
-
if (ready) tryAdd(el, options);
|
|
96
|
+
if (ready) tryAdd(el, options).then();
|
|
97
97
|
},
|
|
98
98
|
{ immediate: true }
|
|
99
99
|
);
|
|
100
100
|
stopMap.set(el, stop);
|
|
101
101
|
if (el.complete) {
|
|
102
|
-
tryAdd(el, options);
|
|
102
|
+
tryAdd(el, options).then();
|
|
103
103
|
} else {
|
|
104
104
|
const onLoad = () => tryAdd(el, options);
|
|
105
105
|
el.addEventListener("load", onLoad, { once: true });
|
|
@@ -2,8 +2,7 @@ import { watch } from "vue";
|
|
|
2
2
|
import { Canvas3 } from "#canvas3-nuxt/utils/canvas3/canvas3";
|
|
3
3
|
export const vCanvas3ScrollAction = {
|
|
4
4
|
mounted(el, binding) {
|
|
5
|
-
|
|
6
|
-
el.dataset.scrollActivateId = id;
|
|
5
|
+
el.dataset.scrollActivateId = crypto.randomUUID();
|
|
7
6
|
if (binding.value?.scrollSpeedSetTo?.value) {
|
|
8
7
|
el.dataset.scrollSpeed = binding.value?.scrollSpeedSetTo?.value;
|
|
9
8
|
}
|
|
@@ -27,24 +26,6 @@ export const vCanvas3ScrollAction = {
|
|
|
27
26
|
);
|
|
28
27
|
}
|
|
29
28
|
},
|
|
30
|
-
//* ************************
|
|
31
|
-
// DEACTIVATE UPDATES - no need as uniforms are reference based and do not need updates
|
|
32
|
-
// updated(el, binding) {
|
|
33
|
-
// const existingElement = Canvas3.getScrollActiveElement(el.dataset.scrollActivateId)
|
|
34
|
-
// if (existingElement) {
|
|
35
|
-
// const oldBinding = existingElement.options
|
|
36
|
-
//
|
|
37
|
-
// const isSame = shallowEqualObject(binding.value, oldBinding)
|
|
38
|
-
// if (!isSame) {
|
|
39
|
-
// console.log('isSame', isSame, el.dataset.scrollActivateId)
|
|
40
|
-
// Canvas3.updateOnScrollActiveElement({
|
|
41
|
-
// elNode: el,
|
|
42
|
-
// options: binding.value,
|
|
43
|
-
// arg: binding.arg,
|
|
44
|
-
// })
|
|
45
|
-
// }
|
|
46
|
-
// }
|
|
47
|
-
// },
|
|
48
29
|
unmounted(el) {
|
|
49
30
|
Canvas3.removeScrollActiveElement(el);
|
|
50
31
|
},
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Mesh, Vector2 } from 'three';
|
|
2
2
|
import type { DirectiveBinding } from 'vue';
|
|
3
|
+
import type * as THREE from 'three';
|
|
3
4
|
type Shader = {
|
|
4
5
|
fragmentShader: string;
|
|
5
6
|
vertexShader: string;
|
|
@@ -37,7 +38,7 @@ export type MeshMaterialUniform = Record<string, {
|
|
|
37
38
|
value: number;
|
|
38
39
|
}>;
|
|
39
40
|
export type BaseUniform = Record<string, {
|
|
40
|
-
value: Vector2 | number | null;
|
|
41
|
+
value: Vector2 | THREE.Texture | number | null;
|
|
41
42
|
duration?: number;
|
|
42
43
|
ease?: string | null | undefined;
|
|
43
44
|
}>;
|
|
@@ -54,6 +55,7 @@ export type Canvas3OptionsType = {
|
|
|
54
55
|
prefersReducedMotion: boolean;
|
|
55
56
|
isMobile: boolean;
|
|
56
57
|
disabled: boolean;
|
|
58
|
+
mouseTrackingEnabled?: boolean;
|
|
57
59
|
};
|
|
58
60
|
export type MeshType = {
|
|
59
61
|
name: string;
|
|
@@ -113,15 +115,7 @@ export type myEffectType = {
|
|
|
113
115
|
};
|
|
114
116
|
export type Canvas3ImageBinding = {
|
|
115
117
|
shaderName?: string;
|
|
116
|
-
uniforms?: MeshMaterialUniform;
|
|
117
|
-
activateMeshUniforms?: MeshMaterialUniform;
|
|
118
|
-
};
|
|
119
|
-
export type Canvas3ImageBindType = {
|
|
120
|
-
alt: string;
|
|
121
|
-
src: string;
|
|
122
|
-
loadStrategy?: 'lazy' | 'eager' | undefined;
|
|
123
|
-
shaderName?: string;
|
|
124
|
-
uniforms?: MeshMaterialUniform | undefined;
|
|
118
|
+
uniforms?: MeshMaterialUniform | BaseUniform;
|
|
125
119
|
activateMeshUniforms?: MeshMaterialUniform;
|
|
126
120
|
};
|
|
127
121
|
export type AttrsType = Record<string, number | string>;
|
|
@@ -4,7 +4,7 @@ import type { Pass } from 'three/addons/postprocessing/Pass.js';
|
|
|
4
4
|
import { ShaderPass } from 'three/addons/postprocessing/ShaderPass.js';
|
|
5
5
|
import type { ShaderMaterial, WebGLRenderer } from 'three';
|
|
6
6
|
import Scroll from '#canvas3-nuxt/utils/canvas3/scroll';
|
|
7
|
-
import type { AnimationCallbacks, Canvas3OptionsType, ScrollActionBinding, MeshMaterialUniform, MeshType, myEffectType, AnimationCallSetup,
|
|
7
|
+
import type { AnimationCallbacks, Canvas3OptionsType, ScrollActionBinding, MeshMaterialUniform, MeshType, myEffectType, AnimationCallSetup, BaseUniform } from '#canvas3-nuxt/types/types';
|
|
8
8
|
declare class Canvas3Class {
|
|
9
9
|
canvasInitiated: import("vue").Ref<boolean, boolean>;
|
|
10
10
|
renderDisabled: boolean;
|
|
@@ -43,21 +43,20 @@ declare class Canvas3Class {
|
|
|
43
43
|
yPrev: number;
|
|
44
44
|
};
|
|
45
45
|
init(canvasElement: HTMLElement, scrollableContent: HTMLElement, canvas3Options: Canvas3OptionsType): Promise<void>;
|
|
46
|
+
setScrollShaderByName(shaderName: string): void;
|
|
46
47
|
setRenderDisabled(status: boolean): void;
|
|
47
48
|
setCanvasAndCamera(): void;
|
|
48
49
|
resizeOnChange(): void;
|
|
49
50
|
resizeImageStore(): void;
|
|
50
51
|
setImageMeshPositions(): void;
|
|
51
|
-
meshUniformsUpdate(id: string, uniforms: MeshMaterialUniform): void;
|
|
52
|
+
meshUniformsUpdate(id: string, uniforms: MeshMaterialUniform | BaseUniform): void;
|
|
52
53
|
activateMesh(meshId: string, isActive: boolean): void;
|
|
53
54
|
addOnScrollActivateElement(binding: ScrollActionBinding): void;
|
|
54
|
-
getScrollActiveElement(scrollActiveElementId: string): ScrollActionType | undefined;
|
|
55
|
-
updateOnScrollActiveElement(updatedBinding: ScrollActionBinding): void;
|
|
56
55
|
removeScrollActiveElement(elNode: HTMLElement): void;
|
|
57
56
|
removeMesh(id: string): void;
|
|
58
57
|
addAnimationToRender(callBackName: string, callBackSetup: AnimationCallSetup): void;
|
|
59
58
|
removeAnimationFromRender(callBackName: string): void;
|
|
60
|
-
addImageAsMesh(imgHtmlEl: HTMLImageElement, shaderName: string | null, meshId: string, meshUniforms: MeshMaterialUniform, activateMeshUniforms: MeshMaterialUniform): Promise<void>;
|
|
59
|
+
addImageAsMesh(imgHtmlEl: HTMLImageElement, shaderName: string | null, meshId: string, meshUniforms: MeshMaterialUniform | BaseUniform, activateMeshUniforms: MeshMaterialUniform): Promise<void>;
|
|
61
60
|
composerPass(): void;
|
|
62
61
|
setSize(): void;
|
|
63
62
|
scrollToTop(delay?: number): void;
|
|
@@ -66,22 +66,24 @@ class Canvas3Class {
|
|
|
66
66
|
this.setSize();
|
|
67
67
|
this.composerPass();
|
|
68
68
|
this.startRenderLoop();
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
this.mouse.movementX
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
69
|
+
if (canvas3Options.mouseTrackingEnabled) {
|
|
70
|
+
window.addEventListener("mousemove", (event) => {
|
|
71
|
+
this.mouseMoveInProgress = true;
|
|
72
|
+
this.mouse.x = event.clientX / this.width;
|
|
73
|
+
this.mouse.y = event.clientY / this.height;
|
|
74
|
+
setTimeout(() => {
|
|
75
|
+
this.mouse.movementX = event.clientX / this.width;
|
|
76
|
+
this.mouse.movementY = event.clientY / this.height;
|
|
77
|
+
}, 70);
|
|
78
|
+
if (this.mouse.movementX === 0 && this.mouse.movementY === 0) {
|
|
79
|
+
this.mouse.movementX = this.mouse.x;
|
|
80
|
+
this.mouse.movementY = this.mouse.y;
|
|
81
|
+
}
|
|
82
|
+
setTimeout(() => {
|
|
83
|
+
this.mouseMoveInProgress = false;
|
|
84
|
+
}, 0);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
85
87
|
document.addEventListener("visibilitychange", () => {
|
|
86
88
|
if (document.hidden) {
|
|
87
89
|
this.documentVisibility = false;
|
|
@@ -94,6 +96,15 @@ class Canvas3Class {
|
|
|
94
96
|
this.canvasInitiated.value = true;
|
|
95
97
|
studio783log();
|
|
96
98
|
}
|
|
99
|
+
setScrollShaderByName(shaderName) {
|
|
100
|
+
const newShader = this.options.shaders[shaderName];
|
|
101
|
+
if (!newShader || !this.customPass) return;
|
|
102
|
+
this.myEffect.vertexShader = newShader.vertexShader;
|
|
103
|
+
this.myEffect.fragmentShader = newShader.fragmentShader;
|
|
104
|
+
this.customPass.material.vertexShader = newShader.vertexShader;
|
|
105
|
+
this.customPass.material.fragmentShader = newShader.fragmentShader;
|
|
106
|
+
this.customPass.material.needsUpdate = true;
|
|
107
|
+
}
|
|
97
108
|
setRenderDisabled(status) {
|
|
98
109
|
if (!status && this.renderDisabled) {
|
|
99
110
|
this.renderDisabled = false;
|
|
@@ -162,7 +173,7 @@ class Canvas3Class {
|
|
|
162
173
|
value: uniforms[uniKey].value
|
|
163
174
|
};
|
|
164
175
|
gsap.to(material.uniforms[uniKey], {
|
|
165
|
-
duration: uniforms[uniKey].duration,
|
|
176
|
+
duration: uniforms[uniKey].duration ?? 0,
|
|
166
177
|
value: uniforms[uniKey].value,
|
|
167
178
|
ease: uniforms[uniKey].ease ?? "power1.inOut"
|
|
168
179
|
});
|
|
@@ -211,30 +222,6 @@ class Canvas3Class {
|
|
|
211
222
|
const newBinding = generateBindingLogic(binding);
|
|
212
223
|
this.scroll?.DOM.onScrollActivateElements.push(newBinding);
|
|
213
224
|
}
|
|
214
|
-
getScrollActiveElement(scrollActiveElementId) {
|
|
215
|
-
if (!this.scroll) return;
|
|
216
|
-
let scrollActiveElement;
|
|
217
|
-
for (const [
|
|
218
|
-
index,
|
|
219
|
-
item
|
|
220
|
-
] of this.scroll.DOM.onScrollActivateElements.entries()) {
|
|
221
|
-
if (item.elNode.dataset.scrollActivateId === scrollActiveElementId) {
|
|
222
|
-
scrollActiveElement = this.scroll.DOM.onScrollActivateElements[index];
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
return scrollActiveElement;
|
|
226
|
-
}
|
|
227
|
-
updateOnScrollActiveElement(updatedBinding) {
|
|
228
|
-
if (!this.scroll) return;
|
|
229
|
-
for (const [
|
|
230
|
-
index,
|
|
231
|
-
item
|
|
232
|
-
] of this.scroll.DOM.onScrollActivateElements.entries()) {
|
|
233
|
-
if (item.elNode.dataset.scrollActivateId === updatedBinding.elNode.dataset.scrollActivateId) {
|
|
234
|
-
this.scroll.DOM.onScrollActivateElements[index] = generateBindingLogic(updatedBinding);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
225
|
removeScrollActiveElement(elNode) {
|
|
239
226
|
if (!elNode || !this.scroll?.DOM.onScrollActivateElements || this.scroll?.DOM.onScrollActivateElements.length === 0)
|
|
240
227
|
return;
|
|
@@ -476,6 +463,9 @@ class Canvas3Class {
|
|
|
476
463
|
this.externalAnimationsRender();
|
|
477
464
|
if (this.materials.length > 0) {
|
|
478
465
|
for (const material of this.materials) {
|
|
466
|
+
if (!material.uniforms) {
|
|
467
|
+
continue;
|
|
468
|
+
}
|
|
479
469
|
if (material.uniforms.uTime)
|
|
480
470
|
material.uniforms.uTime.value = this.time;
|
|
481
471
|
if (this.mouseMoveInProgress) {
|
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import type { ScrollActionBinding, ScrollActionType } from '#canvas3-nuxt/types/types';
|
|
2
|
-
import type { Mesh, ShaderMaterial
|
|
2
|
+
import type { Mesh, ShaderMaterial } from 'three';
|
|
3
3
|
export declare function generateBindingLogic(newBindingData: ScrollActionBinding): ScrollActionType;
|
|
4
4
|
export declare function findMeshIDs(elParent: HTMLElement): false | string[];
|
|
5
|
-
export declare function loadTexture(src: string): Promise<Texture>;
|
|
6
|
-
export declare const heightPositionCoef = 1.38;
|
|
7
|
-
export declare function getMSDFFontMeshScales(boundsWidth: number, geometryWidth: number): {
|
|
8
|
-
scaleX: number;
|
|
9
|
-
scaleY: number;
|
|
10
|
-
};
|
|
11
5
|
export declare function setScrollActiveElements(elNode: HTMLElement, meshIds: string[], state: string): void;
|
|
12
6
|
export declare function elementNearViewport(bounds: DOMRect, activeRangeInPx: number): boolean;
|
|
13
7
|
export declare const lerp: (a: number, b: number, n: number) => number;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as THREE from "three";
|
|
2
1
|
import { gsap } from "gsap";
|
|
3
2
|
export function generateBindingLogic(newBindingData) {
|
|
4
3
|
const binding = { ...newBindingData, isInView: false };
|
|
@@ -59,24 +58,6 @@ export function findMeshIDs(elParent) {
|
|
|
59
58
|
}
|
|
60
59
|
return meshIds;
|
|
61
60
|
}
|
|
62
|
-
export function loadTexture(src) {
|
|
63
|
-
return new Promise((resolve, reject) => {
|
|
64
|
-
const loader = new THREE.TextureLoader();
|
|
65
|
-
return loader.load(
|
|
66
|
-
src,
|
|
67
|
-
(texture) => resolve(texture),
|
|
68
|
-
void 0,
|
|
69
|
-
(err) => reject(err)
|
|
70
|
-
);
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
const heightSizeCoef = 1;
|
|
74
|
-
export const heightPositionCoef = 1.38;
|
|
75
|
-
export function getMSDFFontMeshScales(boundsWidth, geometryWidth) {
|
|
76
|
-
const scaleX = boundsWidth / geometryWidth * heightSizeCoef;
|
|
77
|
-
const scaleY = -1 * scaleX * heightSizeCoef;
|
|
78
|
-
return { scaleX, scaleY };
|
|
79
|
-
}
|
|
80
61
|
export function setScrollActiveElements(elNode, meshIds, state) {
|
|
81
62
|
if (!meshIds || meshIds.length === 0) return;
|
|
82
63
|
for (const id of meshIds) {
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import type { Mesh } from 'three';
|
|
1
|
+
import type { Mesh, ShaderMaterial } from 'three';
|
|
2
2
|
import { getShaderMaterial } from '#canvas3-nuxt/utils/canvas3/helpers';
|
|
3
3
|
export declare const Canvas3: {
|
|
4
4
|
addMeshToScene: (mesh: Mesh) => void;
|
|
5
5
|
getMeshFromSceneByName: (meshName: string) => import("three").Object3D<import("three").Object3DEventMap> | undefined;
|
|
6
|
+
addMaterialForGlobalUniformUpdates: (material: ShaderMaterial) => void;
|
|
6
7
|
addAnimationToRender: (callBackName: string, callBackSetup: import("../types/types.js").AnimationCallSetup) => void;
|
|
7
8
|
removeAnimationFromRender: (callBackName: string) => void;
|
|
8
|
-
addImageAsMesh: (imgHtmlEl: HTMLImageElement, shaderName: string | null, meshId: string, meshUniforms: import("../types/types.js").MeshMaterialUniform, activateMeshUniforms: import("../types/types.js").MeshMaterialUniform) => Promise<void>;
|
|
9
|
+
addImageAsMesh: (imgHtmlEl: HTMLImageElement, shaderName: string | null, meshId: string, meshUniforms: import("../types/types.js").MeshMaterialUniform | import("../types/types.js").BaseUniform, activateMeshUniforms: import("../types/types.js").MeshMaterialUniform) => Promise<void>;
|
|
9
10
|
getShaderMaterial: typeof getShaderMaterial;
|
|
10
11
|
removeMesh: (id: string) => void;
|
|
11
12
|
setAnimationsToRender: (state: boolean) => void;
|
|
@@ -21,4 +22,5 @@ export declare const Canvas3: {
|
|
|
21
22
|
getCamera: () => import("three").PerspectiveCamera | null;
|
|
22
23
|
getRenderer: () => import("three").WebGLRenderer | null;
|
|
23
24
|
getScene: () => import("three").Scene;
|
|
25
|
+
setScrollShaderByName: (shaderName: string) => void;
|
|
24
26
|
};
|
|
@@ -7,6 +7,9 @@ export const Canvas3 = {
|
|
|
7
7
|
getMeshFromSceneByName: (meshName) => {
|
|
8
8
|
return mainClass.scene.getObjectByName(meshName);
|
|
9
9
|
},
|
|
10
|
+
addMaterialForGlobalUniformUpdates: (material) => {
|
|
11
|
+
mainClass.materials.push(material);
|
|
12
|
+
},
|
|
10
13
|
addAnimationToRender: mainClass.addAnimationToRender.bind(mainClass),
|
|
11
14
|
removeAnimationFromRender: mainClass.removeAnimationFromRender.bind(mainClass),
|
|
12
15
|
addImageAsMesh: mainClass.addImageAsMesh.bind(mainClass),
|
|
@@ -28,5 +31,6 @@ export const Canvas3 = {
|
|
|
28
31
|
},
|
|
29
32
|
getCamera: () => mainClass.camera,
|
|
30
33
|
getRenderer: () => mainClass.renderer,
|
|
31
|
-
getScene: () => mainClass.scene
|
|
34
|
+
getScene: () => mainClass.scene,
|
|
35
|
+
setScrollShaderByName: mainClass.setScrollShaderByName.bind(mainClass)
|
|
32
36
|
};
|