Skip to content

Commit 3175cb7

Browse files
authored
feat: wheel event (#3)
* chore: init wheel logic * feat: wheel * wheel event
1 parent 8649cf4 commit 3175cb7

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

src/primitives/event.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// etoile is a simple 2D render engine for web and it don't take complex rendering into account.
22
// So it's no need to implement a complex event algorithm or hit mode.
33
// If one day etoile need to build as a useful library. Pls rewrite it!
4+
// All of implementation don't want to consider the compatibility of the browser.
45

56
import { Display } from '../etoile/graph/display'
67
import { Render, Event as _Event, easing, etoile } from '../etoile'
@@ -274,6 +275,36 @@ export class SelfEvent extends RegisterModule {
274275
smoothDrawing(this)
275276
}
276277

278+
onwheel(this: SelfEventContenxt, metadata: PrimitiveEventMetadata<'wheel'>) {
279+
const { self, treemap } = this
280+
// @ts-expect-error
281+
const wheelDelta = metadata.native.wheelDelta
282+
const absWheelDelta = Math.abs(wheelDelta)
283+
const offsetX = metadata.native.offsetX
284+
const offsetY = metadata.native.offsetY
285+
286+
if (wheelDelta === 0) {
287+
return
288+
}
289+
self.forceDestroy = true
290+
self.isAnimating = true
291+
treemap.reset()
292+
const factor = absWheelDelta > 3 ? 1.4 : absWheelDelta > 1 ? 1.2 : 1.1
293+
const delta = wheelDelta > 0 ? factor : 1 / factor
294+
295+
self.scaleRatio *= delta
296+
297+
const translateX = offsetX - (offsetX - self.translateX) * delta
298+
const translateY = offsetY - (offsetY - self.translateY) * delta
299+
self.translateX = translateX
300+
self.translateY = translateY
301+
applyGraphTransform(treemap.elements, self.translateX, self.translateY, self.scaleRatio)
302+
303+
treemap.update()
304+
self.forceDestroy = false
305+
self.isAnimating = false
306+
}
307+
277308
init(app: App, treemap: TreemapLayout, render: Render): void {
278309
const event = this.event
279310
const nativeEvents: Array<ReturnType<typeof bindPrimitiveEvent>> = []
@@ -305,6 +336,9 @@ export class SelfEvent extends RegisterModule {
305336
selfEvt('mousemove', this.onmousemove)
306337
selfEvt('mouseout', this.onmouseout)
307338

339+
// wheel
340+
selfEvt('wheel', this.onwheel)
341+
308342
applyZoomEvent({ treemap, self: this })
309343

310344
treemap.event.on('cleanup:selfevent', () => {

0 commit comments

Comments
 (0)