Disable Globe markers interactivity if type is cropped
This commit is contained in:
@@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
export let type: string = undefined
|
export let type: string = undefined
|
||||||
export let enableMarkers: boolean = true
|
export let enableMarkers: boolean = true
|
||||||
|
export let enableMarkersLinks: boolean = true
|
||||||
export let speed: number = 0.1
|
export let speed: number = 0.1
|
||||||
export let pane: boolean = import.meta.env.DEV
|
export let pane: boolean = import.meta.env.DEV
|
||||||
export let width: number = undefined
|
export let width: number = undefined
|
||||||
@@ -50,6 +51,7 @@
|
|||||||
sunAngle: 2,
|
sunAngle: 2,
|
||||||
rotationStart: randomContinent.rotation,
|
rotationStart: randomContinent.rotation,
|
||||||
enableMarkers,
|
enableMarkers,
|
||||||
|
enableMarkersLinks: type !== 'cropped',
|
||||||
markers,
|
markers,
|
||||||
pane,
|
pane,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -48,12 +48,14 @@ export class Globe {
|
|||||||
autoRotate: options.autoRotate,
|
autoRotate: options.autoRotate,
|
||||||
speed: options.speed,
|
speed: options.speed,
|
||||||
enableMarkers: options.enableMarkers,
|
enableMarkers: options.enableMarkers,
|
||||||
|
enableMarkersLinks: options.enableMarkersLinks,
|
||||||
zoom: 1.3075,
|
zoom: 1.3075,
|
||||||
sunAngle: options.sunAngle || 0,
|
sunAngle: options.sunAngle || 0,
|
||||||
sunAngleDelta: 1.8,
|
sunAngleDelta: 1.8,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Misc
|
// Misc
|
||||||
|
this.isDev = import.meta.env.DEV
|
||||||
this.hoveringMarker = false
|
this.hoveringMarker = false
|
||||||
this.hoveringMarkerTimeout = 0
|
this.hoveringMarkerTimeout = 0
|
||||||
this.lastFrame = now()
|
this.lastFrame = now()
|
||||||
@@ -218,9 +220,12 @@ export class Globe {
|
|||||||
|
|
||||||
// Update marker position
|
// Update marker position
|
||||||
updateMarkerPosition (marker: Marker, markerEl: HTMLElement) {
|
updateMarkerPosition (marker: Marker, markerEl: HTMLElement) {
|
||||||
|
// Get vec3 position from lat/long
|
||||||
const position = latLonToVec3(marker.lat, marker.lng)
|
const position = latLonToVec3(marker.lat, marker.lng)
|
||||||
const screenVector = new Vec3(position.x, position.y, position.z)
|
const screenVector = new Vec3(position.x, position.y, position.z)
|
||||||
|
// Apply transformation to marker from globe world matrix
|
||||||
screenVector.applyMatrix4(this.globe.worldMatrix)
|
screenVector.applyMatrix4(this.globe.worldMatrix)
|
||||||
|
// Then project marker on camera
|
||||||
this.camera.project(screenVector)
|
this.camera.project(screenVector)
|
||||||
|
|
||||||
// Position marker
|
// Position marker
|
||||||
@@ -236,13 +241,20 @@ export class Globe {
|
|||||||
updateMarkers () {
|
updateMarkers () {
|
||||||
this.markers.forEach((marker: Marker) => {
|
this.markers.forEach((marker: Marker) => {
|
||||||
const markerEl = this.getMarker(marker.slug)
|
const markerEl = this.getMarker(marker.slug)
|
||||||
|
|
||||||
// Update marker position
|
// Update marker position
|
||||||
this.updateMarkerPosition(marker, markerEl)
|
this.updateMarkerPosition(marker, markerEl)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Disable markers
|
// Enable or disable markers
|
||||||
|
enableMarkers (state: boolean) {
|
||||||
|
this.markers.forEach((marker: Marker) => {
|
||||||
|
const markerEl = this.getMarker(marker.slug)
|
||||||
|
markerEl.classList.toggle('is-disabled', !state)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hide markers
|
||||||
hideMarkers () {
|
hideMarkers () {
|
||||||
this.markers.forEach((marker: Marker) => {
|
this.markers.forEach((marker: Marker) => {
|
||||||
const markerEl = this.getMarker(marker.slug)
|
const markerEl = this.getMarker(marker.slug)
|
||||||
@@ -287,6 +299,8 @@ export class Globe {
|
|||||||
// Update markers
|
// Update markers
|
||||||
if (this.params.enableMarkers) {
|
if (this.params.enableMarkers) {
|
||||||
this.updateMarkers()
|
this.updateMarkers()
|
||||||
|
// Enable or disable interactivity
|
||||||
|
this.enableMarkers(this.params.enableMarkersLinks)
|
||||||
} else {
|
} else {
|
||||||
this.hideMarkers()
|
this.hideMarkers()
|
||||||
}
|
}
|
||||||
@@ -297,8 +311,6 @@ export class Globe {
|
|||||||
* Destroy
|
* Destroy
|
||||||
*/
|
*/
|
||||||
destroy () {
|
destroy () {
|
||||||
console.log('destroy globe2')
|
|
||||||
|
|
||||||
this.gl = null
|
this.gl = null
|
||||||
this.scene = null
|
this.scene = null
|
||||||
this.camera = null
|
this.camera = null
|
||||||
@@ -309,6 +321,9 @@ export class Globe {
|
|||||||
if (this.pane) {
|
if (this.pane) {
|
||||||
this.pane.dispose()
|
this.pane.dispose()
|
||||||
}
|
}
|
||||||
|
if (this.isDev) {
|
||||||
|
console.log('globe: destroy')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -327,6 +342,7 @@ type Options = {
|
|||||||
sunAngle: number
|
sunAngle: number
|
||||||
rotationStart?: number
|
rotationStart?: number
|
||||||
enableMarkers?: boolean
|
enableMarkers?: boolean
|
||||||
|
enableMarkersLinks?: boolean
|
||||||
markers?: any[]
|
markers?: any[]
|
||||||
pane?: boolean
|
pane?: boolean
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,9 @@ export const createPane = (ctx: any) => {
|
|||||||
markers.addInput(ctx.params, 'enableMarkers', {
|
markers.addInput(ctx.params, 'enableMarkers', {
|
||||||
label: 'Enable markers',
|
label: 'Enable markers',
|
||||||
})
|
})
|
||||||
|
markers.addInput(ctx.params, 'enableMarkersLinks', {
|
||||||
|
label: 'Interactive',
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -155,6 +155,11 @@
|
|||||||
transform: scale(0) translateZ(0);
|
transform: scale(0) translateZ(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// State: Is disabled
|
||||||
|
&:global(.is-disabled a) {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user