pixi-scrollbox 2.3.1 → 3.0.0
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/@types/index.d.ts +25 -17
- package/README.md +75 -23
- package/dist/scrollbox.js +2 -2
- package/dist/scrollbox.js.map +1 -1
- package/dist/scrollbox.mjs +362 -0
- package/dist/scrollbox.mjs.map +1 -0
- package/package.json +61 -68
- package/dist/scrollbox.es.js +0 -859
- package/dist/scrollbox.es.js.map +0 -1
package/@types/index.d.ts
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Viewport } from 'pixi-viewport'
|
|
1
|
+
import { Container, DestroyOptions, EventSystem, FederatedPointerEvent, Graphics, Ticker } from 'pixi.js'
|
|
2
|
+
import type { Viewport } from 'pixi-viewport'
|
|
3
3
|
|
|
4
|
-
type OverflowScrollType = 'none' | 'scroll' | 'hidden' | 'auto'
|
|
5
|
-
type UnderflowType = 'center' | 'top' | 'left' | 'right' | 'bottom' | string
|
|
6
|
-
interface ResizeOptions {
|
|
4
|
+
export type OverflowScrollType = 'none' | 'scroll' | 'hidden' | 'auto'
|
|
5
|
+
export type UnderflowType = 'center' | 'top' | 'left' | 'right' | 'bottom' | string
|
|
6
|
+
export interface ResizeOptions {
|
|
7
7
|
boxWidth?: number
|
|
8
8
|
boxHeight?: number
|
|
9
9
|
scrollWidth?: number
|
|
10
10
|
scrollHeight?: number
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
interface
|
|
13
|
+
export interface ScrollboxOptions {
|
|
14
|
+
/** the renderer's EventSystem (app.renderer.events) */
|
|
15
|
+
events: EventSystem
|
|
14
16
|
boxHeight?: number
|
|
15
17
|
boxWidth?: number
|
|
16
18
|
scrollbarSize?: number
|
|
@@ -30,18 +32,18 @@ interface ScrollBoxOptions {
|
|
|
30
32
|
fadeScrollboxEase?: string | Function
|
|
31
33
|
passiveWheel?: boolean
|
|
32
34
|
clampWheel?: boolean
|
|
35
|
+
wheelSwapAxes?: boolean
|
|
33
36
|
overflowX?: OverflowScrollType
|
|
34
37
|
overflowY?: OverflowScrollType
|
|
35
38
|
overflow?: OverflowScrollType
|
|
36
39
|
noTicker?: boolean
|
|
37
|
-
ticker?:
|
|
38
|
-
divWheel?: HTMLElement
|
|
40
|
+
ticker?: Ticker
|
|
39
41
|
}
|
|
40
42
|
|
|
41
43
|
/**
|
|
42
44
|
* pixi.js scrollbox: a masked content box that can scroll vertically or horizontally with scrollbars
|
|
43
45
|
*/
|
|
44
|
-
export declare class Scrollbox extends
|
|
46
|
+
export declare class Scrollbox extends Container {
|
|
45
47
|
boxHeight: number
|
|
46
48
|
boxWidth: number
|
|
47
49
|
content: Viewport
|
|
@@ -52,10 +54,10 @@ export declare class Scrollbox extends PIXI.Container {
|
|
|
52
54
|
dragScroll: boolean
|
|
53
55
|
readonly isScrollbarHorizontal: boolean
|
|
54
56
|
readonly isScrollbarVertical: boolean
|
|
55
|
-
overflow:
|
|
56
|
-
overflowX:
|
|
57
|
-
overflowY:
|
|
58
|
-
scrollbar:
|
|
57
|
+
overflow: OverflowScrollType
|
|
58
|
+
overflowX: OverflowScrollType
|
|
59
|
+
overflowY: OverflowScrollType
|
|
60
|
+
scrollbar: Graphics
|
|
59
61
|
scrollbarOffsetHorizontal: number
|
|
60
62
|
scrollbarOffsetVertical: number
|
|
61
63
|
scrollbarSize: number
|
|
@@ -68,7 +70,7 @@ export declare class Scrollbox extends PIXI.Container {
|
|
|
68
70
|
/**
|
|
69
71
|
* create a scrollbox
|
|
70
72
|
*/
|
|
71
|
-
constructor(options
|
|
73
|
+
constructor(options: ScrollboxOptions)
|
|
72
74
|
|
|
73
75
|
/**
|
|
74
76
|
* show the scrollbar and restart the timer for fade if options.fade is set
|
|
@@ -95,21 +97,27 @@ export declare class Scrollbox extends PIXI.Container {
|
|
|
95
97
|
*/
|
|
96
98
|
updateLoop(elapsed: number): void
|
|
97
99
|
|
|
100
|
+
/**
|
|
101
|
+
* removes the ticker and the viewport's wheel listener, then destroys the scrollbox
|
|
102
|
+
*/
|
|
103
|
+
destroy(options?: DestroyOptions): void
|
|
104
|
+
|
|
98
105
|
private _drawMask(): void
|
|
99
106
|
private _drawScrollbars(): void
|
|
107
|
+
private _clampAndDraw(): void
|
|
100
108
|
|
|
101
109
|
/**
|
|
102
110
|
* handle pointer down on scrollbar
|
|
103
111
|
*/
|
|
104
|
-
private scrollbarDown(e:
|
|
112
|
+
private scrollbarDown(e: FederatedPointerEvent): void
|
|
105
113
|
|
|
106
114
|
/**
|
|
107
115
|
* handle pointer move on scrollbar
|
|
108
116
|
*/
|
|
109
|
-
private scrollbarMove(e:
|
|
117
|
+
private scrollbarMove(e: FederatedPointerEvent): void
|
|
110
118
|
|
|
111
119
|
/**
|
|
112
|
-
* handle pointer
|
|
120
|
+
* handle pointer up on scrollbar
|
|
113
121
|
*/
|
|
114
122
|
private scrollbarUp(): void
|
|
115
123
|
}
|
package/README.md
CHANGED
|
@@ -7,53 +7,69 @@ Features:
|
|
|
7
7
|
* scrollbox's scrollbars may be hidden when not needed (options.overflow=auto or hidden)
|
|
8
8
|
* scrollbox may also be scrolled by dragging on the content window (options.dragScroll=true)
|
|
9
9
|
|
|
10
|
+
## AI-assisted development
|
|
11
|
+
|
|
12
|
+
Starting in November 2026, [Claude](https://www.anthropic.com/claude) (an AI model by Anthropic) assists with editing this code, including code review, bug fixes, and changes to documentation. A maintainer reviews every change before it is released. If you prefer not to use software developed with AI assistance, please take this into account when choosing whether to use pixi-scrollbox.
|
|
13
|
+
|
|
10
14
|
## Live Example
|
|
11
15
|
[davidfig.github.io/pixi-scrollbox/](https://davidfig.github.io/pixi-scrollbox/)
|
|
12
16
|
|
|
13
17
|
## Rationale
|
|
14
18
|
I needed a scrollbox for the UI of my game and since I had this nifty pixi-viewport, I figured it wouldn't be much work to create it. Five hours later and I realized I was a bit off on my estimates. Hopefully others will find it useful.
|
|
15
19
|
|
|
16
|
-
##
|
|
17
|
-
Scrollbox no longer exports a default object. Instead you need to use:
|
|
20
|
+
## v3.0.0
|
|
18
21
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
Tested with pixi.js v8.22 and pixi-viewport v7.0. Use pixi-scrollbox v2 for older versions of pixi.js.
|
|
23
|
+
|
|
24
|
+
Breaking changes:
|
|
25
|
+
|
|
26
|
+
- Requires pixi.js v8 and pixi-viewport v7 (`peerDependencies` are now `pixi.js ^8` and `pixi-viewport ^7`).
|
|
27
|
+
- `options.events` is required: pass your renderer's EventSystem (`app.renderer.events`). pixi-viewport v7 uses it for wheel events and pointer positions.
|
|
28
|
+
- `options.interaction` and `options.divWheel` are removed. The wheel listener goes on `options.events.domElement` (normally the canvas).
|
|
29
|
+
- The ES module build is now `dist/scrollbox.mjs` (`dist/scrollbox.js` is still the UMD/CommonJS build).
|
|
30
|
+
- `options.passiveWheel` is now passed to the viewport (it was ignored before), so the page doesn't scroll when the wheel scrolls the scrollbox unless you set it to `true`.
|
|
31
|
+
|
|
32
|
+
Fixes and new options:
|
|
33
|
+
|
|
34
|
+
- Content inside the scrollbox gets pointer events (click, hover, pointerout) wherever it shows, including when scrolled to the end, and the mask never blocks them.
|
|
35
|
+
- The wheel scrolls the scrollbox at its current position after it moves or the canvas is resized or offset.
|
|
36
|
+
- Dragging the scrollbar keeps working when the pointer leaves the scrollbar, and clicking the vertical track below the thumb pages down instead of grabbing the thumb.
|
|
37
|
+
- The scrollbar stays clickable when its background is transparent or faded out.
|
|
38
|
+
- `options.fade` restarts its timer whenever the scrollbox scrolls.
|
|
39
|
+
- `options.wheelSwapAxes` lets a mouse wheel scroll a horizontal scrollbox.
|
|
40
|
+
- `scrollbox.destroy()` removes the ticker and the viewport's wheel listener.
|
|
41
|
+
- With `options.noTicker`, `updateLoop(elapsed)` also updates the viewport.
|
|
27
42
|
|
|
28
43
|
## Simple Example
|
|
29
44
|
```js
|
|
30
|
-
|
|
31
|
-
|
|
45
|
+
import { Application, Sprite, Texture } from 'pixi.js'
|
|
46
|
+
import { Scrollbox } from 'pixi-scrollbox'
|
|
47
|
+
|
|
48
|
+
const app = new Application()
|
|
49
|
+
await app.init()
|
|
50
|
+
document.body.appendChild(app.canvas)
|
|
32
51
|
|
|
33
52
|
// create the scrollbox
|
|
34
|
-
const scrollbox = new Scrollbox({ boxWidth: 200, boxHeight: 200})
|
|
53
|
+
const scrollbox = app.stage.addChild(new Scrollbox({ boxWidth: 200, boxHeight: 200, events: app.renderer.events }))
|
|
35
54
|
|
|
36
55
|
// add a sprite to the scrollbox's content
|
|
37
|
-
const sprite = scrollbox.content.addChild(new
|
|
56
|
+
const sprite = scrollbox.content.addChild(new Sprite(Texture.WHITE))
|
|
38
57
|
sprite.width = sprite.height = 500
|
|
39
58
|
sprite.tint = 0xff0000
|
|
40
59
|
|
|
41
60
|
// force an update of the scrollbox's calculations after updating the children
|
|
42
61
|
scrollbox.update()
|
|
43
|
-
|
|
44
|
-
// add the viewport to the stage
|
|
45
|
-
const app = new PIXI.Application()
|
|
46
|
-
document.body.appendChild(app.view)
|
|
47
|
-
app.stage.addChild(scrollbox)
|
|
48
62
|
```
|
|
49
63
|
|
|
64
|
+
`scrollbox.content` is a [pixi-viewport](https://github.com/pixijs-userland/pixi-viewport), so you can use any of its functions to move the content, e.g., `scrollbox.content.moveCorner(0, 0)`. To scroll a horizontal scrollbox with a mouse wheel, use `new Scrollbox({ overflowY: 'hidden', wheelSwapAxes: true, ... })`.
|
|
65
|
+
|
|
50
66
|
## Installation
|
|
51
67
|
```
|
|
52
68
|
npm i pixi-scrollbox pixi-viewport pixi.js
|
|
53
69
|
```
|
|
54
70
|
or
|
|
55
71
|
```
|
|
56
|
-
|
|
72
|
+
pnpm add pixi-scrollbox pixi-viewport pixi.js
|
|
57
73
|
```
|
|
58
74
|
|
|
59
75
|
Note: pixi-viewport and pixi.js are listed as peerDependency, which means you will need to manually install them if they're not already installed (this is to ensure you don't have two versions of these libraries).
|
|
@@ -61,16 +77,52 @@ Note: pixi-viewport and pixi.js are listed as peerDependency, which means you wi
|
|
|
61
77
|
or [download the latest build from github](https://github.com/davidfig/pixi-scrollbox/releases)
|
|
62
78
|
```html
|
|
63
79
|
<script src="/external-directory/pixi.js"></script>
|
|
64
|
-
<script src="/external-directory/
|
|
80
|
+
<script src="/external-directory/pixi_viewport.umd.cjs"></script>
|
|
65
81
|
<script src="/external-directory/scrollbox.js"></script>
|
|
66
82
|
<script>
|
|
67
|
-
const
|
|
83
|
+
const scrollbox = new Scrollbox.Scrollbox({ events: app.renderer.events })
|
|
68
84
|
</script>
|
|
69
85
|
```
|
|
70
86
|
|
|
87
|
+
The UMD build expects pixi.js and pixi-viewport to be loaded first as the globals `PIXI` and `pixi_viewport`.
|
|
88
|
+
|
|
89
|
+
## Migration from v2 to v3
|
|
90
|
+
Pass the renderer's EventSystem and remove `interaction` and `divWheel`:
|
|
91
|
+
|
|
92
|
+
```js
|
|
93
|
+
// v2
|
|
94
|
+
const scrollbox = new Scrollbox({ boxWidth: 200, boxHeight: 200, interaction: app.renderer.plugins.interaction, divWheel: app.view })
|
|
95
|
+
|
|
96
|
+
// v3
|
|
97
|
+
const scrollbox = new Scrollbox({ boxWidth: 200, boxHeight: 200, events: app.renderer.events })
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Migration from v1 to v2
|
|
101
|
+
Scrollbox no longer exports a default object. Instead you need to use:
|
|
102
|
+
|
|
103
|
+
```js
|
|
104
|
+
const Scrollbox = require('pixi-scrollbox').Scrollbox
|
|
105
|
+
```
|
|
106
|
+
or
|
|
107
|
+
```js
|
|
108
|
+
import { Scrollbox } from 'pixi-scrollbox'
|
|
109
|
+
```
|
|
110
|
+
There were some minor name changes to the fade options. See documentation.
|
|
111
|
+
|
|
71
112
|
## API Documentation
|
|
72
113
|
[https://davidfig.github.io/pixi-scrollbox/jsdoc/](https://davidfig.github.io/pixi-scrollbox/jsdoc/)
|
|
73
114
|
|
|
74
|
-
##
|
|
115
|
+
## Development Recipe
|
|
116
|
+
|
|
117
|
+
This project uses [pnpm](https://pnpm.io/) (the version is pinned in `package.json`'s `packageManager` field).
|
|
118
|
+
|
|
119
|
+
1. clone repository
|
|
120
|
+
2. pnpm install
|
|
121
|
+
3. pnpm dev
|
|
122
|
+
4. open browser to http://localhost:5173
|
|
123
|
+
5. pnpm test (tests use [Vitest](https://vitest.dev/) with jsdom)
|
|
124
|
+
6. pnpm run build-demo and pnpm run docs (build the demo and API docs into docs/)
|
|
125
|
+
|
|
126
|
+
## license
|
|
75
127
|
MIT License
|
|
76
128
|
(c) 2019 [YOPEY YOPEY LLC](https://yopeyopey.com/) by [David Figatner](https://twitter.com/yopey_yopey/)
|
package/dist/scrollbox.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports,require("pixi.js"),require("pixi-viewport")):"function"==typeof define&&define.amd?define(["exports","pixi.js","pixi-viewport"],i):i((t="undefined"!=typeof globalThis?globalThis:t||self).Scrollbox={},t.PIXI,t.Viewport)}(this,(function(t,i,o){"use strict";function s(t){if(t&&t.__esModule)return t;var i=Object.create(null);return t&&Object.keys(t).forEach((function(o){if("default"!==o){var s=Object.getOwnPropertyDescriptor(t,o);Object.defineProperty(i,o,s.get?s:{enumerable:!0,get:function(){return t[o]}})}})),i.default=t,Object.freeze(i)}var r=s(i),e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var l=function(t){var i={exports:{}};return t(i,i.exports),i.exports}((function(t,i){(function(){var i;(function(i){t.exports=i})(i={linear:function(t,i,o,s){return o*t/s+i},easeInQuad:function(t,i,o,s){return o*(t/=s)*t+i},easeOutQuad:function(t,i,o,s){return-o*(t/=s)*(t-2)+i},easeInOutQuad:function(t,i,o,s){return(t/=s/2)<1?o/2*t*t+i:-o/2*(--t*(t-2)-1)+i},easeInCubic:function(t,i,o,s){return o*(t/=s)*t*t+i},easeOutCubic:function(t,i,o,s){return o*((t=t/s-1)*t*t+1)+i},easeInOutCubic:function(t,i,o,s){return(t/=s/2)<1?o/2*t*t*t+i:o/2*((t-=2)*t*t+2)+i},easeInQuart:function(t,i,o,s){return o*(t/=s)*t*t*t+i},easeOutQuart:function(t,i,o,s){return-o*((t=t/s-1)*t*t*t-1)+i},easeInOutQuart:function(t,i,o,s){return(t/=s/2)<1?o/2*t*t*t*t+i:-o/2*((t-=2)*t*t*t-2)+i},easeInQuint:function(t,i,o,s){return o*(t/=s)*t*t*t*t+i},easeOutQuint:function(t,i,o,s){return o*((t=t/s-1)*t*t*t*t+1)+i},easeInOutQuint:function(t,i,o,s){return(t/=s/2)<1?o/2*t*t*t*t*t+i:o/2*((t-=2)*t*t*t*t+2)+i},easeInSine:function(t,i,o,s){return-o*Math.cos(t/s*(Math.PI/2))+o+i},easeOutSine:function(t,i,o,s){return o*Math.sin(t/s*(Math.PI/2))+i},easeInOutSine:function(t,i,o,s){return-o/2*(Math.cos(Math.PI*t/s)-1)+i},easeInExpo:function(t,i,o,s){return 0===t?i:o*Math.pow(2,10*(t/s-1))+i},easeOutExpo:function(t,i,o,s){return t===s?i+o:o*(1-Math.pow(2,-10*t/s))+i},easeInOutExpo:function(t,i,o,s){return(t/=s/2)<1?o/2*Math.pow(2,10*(t-1))+i:o/2*(2-Math.pow(2,-10*--t))+i},easeInCirc:function(t,i,o,s){return-o*(Math.sqrt(1-(t/=s)*t)-1)+i},easeOutCirc:function(t,i,o,s){return o*Math.sqrt(1-(t=t/s-1)*t)+i},easeInOutCirc:function(t,i,o,s){return(t/=s/2)<1?-o/2*(Math.sqrt(1-t*t)-1)+i:o/2*(Math.sqrt(1-(t-=2)*t)+1)+i},easeInElastic:function(t,i,o,s){var r,e,l;return l=1.70158,0===t||(t/=s),(e=0)||(e=.3*s),(r=o)<Math.abs(o)?(r=o,l=e/4):l=e/(2*Math.PI)*Math.asin(o/r),-r*Math.pow(2,10*(t-=1))*Math.sin((t*s-l)*(2*Math.PI)/e)+i},easeOutElastic:function(t,i,o,s){var r,e,l;return l=1.70158,0===t||(t/=s),(e=0)||(e=.3*s),(r=o)<Math.abs(o)?(r=o,l=e/4):l=e/(2*Math.PI)*Math.asin(o/r),r*Math.pow(2,-10*t)*Math.sin((t*s-l)*(2*Math.PI)/e)+o+i},easeInOutElastic:function(t,i,o,s){var r,e,l;return l=1.70158,0===t||(t/=s/2),(e=0)||(e=s*(.3*1.5)),(r=o)<Math.abs(o)?(r=o,l=e/4):l=e/(2*Math.PI)*Math.asin(o/r),t<1?r*Math.pow(2,10*(t-=1))*Math.sin((t*s-l)*(2*Math.PI)/e)*-.5+i:r*Math.pow(2,-10*(t-=1))*Math.sin((t*s-l)*(2*Math.PI)/e)*.5+o+i},easeInBack:function(t,i,o,s,r){return void 0===r&&(r=1.70158),o*(t/=s)*t*((r+1)*t-r)+i},easeOutBack:function(t,i,o,s,r){return void 0===r&&(r=1.70158),o*((t=t/s-1)*t*((r+1)*t+r)+1)+i},easeInOutBack:function(t,i,o,s,r){return void 0===r&&(r=1.70158),(t/=s/2)<1?o/2*(t*t*((1+(r*=1.525))*t-r))+i:o/2*((t-=2)*t*((1+(r*=1.525))*t+r)+2)+i},easeInBounce:function(t,o,s,r){return s-i.easeOutBounce(r-t,0,s,r)+o},easeOutBounce:function(t,i,o,s){return(t/=s)<1/2.75?o*(7.5625*t*t)+i:t<2/2.75?o*(7.5625*(t-=1.5/2.75)*t+.75)+i:t<2.5/2.75?o*(7.5625*(t-=2.25/2.75)*t+.9375)+i:o*(7.5625*(t-=2.625/2.75)*t+.984375)+i},easeInOutBounce:function(t,o,s,r){return t<r/2?.5*i.easeInBounce(2*t,0,s,r)+o:.5*i.easeOutBounce(2*t-r,0,s,r)+.5*s+o}})}).call(e)}));const n={boxWidth:100,boxHeight:100,scrollbarSize:10,scrollbarBackground:14540253,scrollbarBackgroundAlpha:1,scrollbarForeground:8947848,scrollbarForegroundAlpha:1,dragScroll:!0,stopPropagation:!0,scrollbarOffsetHorizontal:0,scrollbarOffsetVertical:0,underflow:"top-left",fadeScrollbar:!1,fadeScrollbarTime:1e3,fadeScrollboxWait:3e3,fadeScrollboxEase:"easeInOutSine",passiveWheel:!1,clampWheel:!0};class a extends r.Container{constructor(t={}){if(super(),this.options=Object.assign({},n,t),t.overflow&&(this.options.overflowX=this.options.overflowY=t.overflow),this.ease="function"==typeof this.options.fadeScrollboxEase?this.options.fadeScrollboxEase:l[this.options.fadeScrollboxEase],this.content=this.addChild(new o.Viewport({passiveWheel:!1,stopPropagation:this.options.stopPropagation,screenWidth:this.options.boxWidth,screenHeight:this.options.boxHeight,interaction:this.options.interaction,divWheel:this.options.divWheel})),this.content.decelerate().on("moved",()=>this._drawScrollbars()),t.ticker)this.options.ticker=t.ticker;else{let i;const o=r;i=parseInt(/^(\d+)\./.exec(r.VERSION)[1])<5?o.ticker.shared:o.Ticker.shared,this.options.ticker=t.ticker||i}this.scrollbar=this.addChild(new r.Graphics),this.scrollbar.interactive=!0,this.scrollbar.on("pointerdown",this.scrollbarDown,this),this.interactive=!0,this.on("pointermove",this.scrollbarMove,this),this.on("pointerup",this.scrollbarUp,this),this.on("pointercancel",this.scrollbarUp,this),this.on("pointerupoutside",this.scrollbarUp,this),this._maskContent=this.addChild(new r.Graphics),this.update(),this.options.noTicker||(this.tickerFunction=()=>this.updateLoop(Math.min(this.options.ticker.elapsedMS,16.6667)),this.options.ticker.add(this.tickerFunction))}get scrollbarOffsetHorizontal(){return this.options.scrollbarOffsetHorizontal}set scrollbarOffsetHorizontal(t){this.options.scrollbarOffsetHorizontal=t}get scrollbarOffsetVertical(){return this.options.scrollbarOffsetVertical}set scrollbarOffsetVertical(t){this.options.scrollbarOffsetVertical=t}get disable(){return this._disabled}set disable(t){this._disabled!==t&&(this._disabled=t,this.update())}get stopPropagation(){return this.options.stopPropagation}set stopPropagation(t){this.options.stopPropagation=t}get dragScroll(){return this.options.dragScroll}set dragScroll(t){this.options.dragScroll=t,t?this.content.drag():void 0!==this.content.removePlugin?this.content.removePlugin("drag"):this.content.plugins.remove("drag"),this.update()}get boxWidth(){return this.options.boxWidth}set boxWidth(t){this.options.boxWidth=t,this.content.screenWidth=t,this.update()}get overflow(){return this.options.overflow}set overflow(t){this.options.overflow=t,this.options.overflowX=t,this.options.overflowY=t,this.update()}get overflowX(){return this.options.overflowX}set overflowX(t){this.options.overflowX=t,this.update()}get overflowY(){return this.options.overflowY}set overflowY(t){this.options.overflowY=t,this.update()}get boxHeight(){return this.options.boxHeight}set boxHeight(t){this.options.boxHeight=t,this.content.screenHeight=t,this.update()}get scrollbarSize(){return this.options.scrollbarSize}set scrollbarSize(t){this.options.scrollbarSize=t}get contentWidth(){return this.options.boxWidth-(this.isScrollbarVertical?this.options.scrollbarSize:0)}get contentHeight(){return this.options.boxHeight-(this.isScrollbarHorizontal?this.options.scrollbarSize:0)}get isScrollbarVertical(){return this._isScrollbarVertical}get isScrollbarHorizontal(){return this._isScrollbarHorizontal}get scrollTop(){return this.content.top}set scrollTop(t){this.content.top=t,this._drawScrollbars()}get scrollLeft(){return this.content.left}set scrollLeft(t){this.content.left=t,this._drawScrollbars()}get scrollWidth(){return this._scrollWidth||this.content.width}set scrollWidth(t){this._scrollWidth=t}get scrollHeight(){return this._scrollHeight||this.content.height}set scrollHeight(t){this._scrollHeight=t}_drawScrollbars(){this._isScrollbarHorizontal="scroll"===this.overflowX||-1===["hidden","none"].indexOf(this.overflowX)&&this.scrollWidth>this.options.boxWidth,this._isScrollbarVertical="scroll"===this.overflowY||-1===["hidden","none"].indexOf(this.overflowY)&&this.scrollHeight>this.options.boxHeight,this.scrollbar.clear(),this.scrollWidth,this._isScrollbarVertical&&this.options.scrollbarSize,this.scrollHeight,this.isScrollbarHorizontal&&this.options.scrollbarSize;const t=this.scrollWidth+(this.isScrollbarVertical?this.options.scrollbarSize:0),i=this.scrollHeight+(this.isScrollbarHorizontal?this.options.scrollbarSize:0);this.scrollbarTop=this.content.top/i*this.boxHeight,this.scrollbarTop=this.scrollbarTop<0?0:this.scrollbarTop,this.scrollbarHeight=this.boxHeight/i*this.boxHeight,this.scrollbarHeight=this.scrollbarTop+this.scrollbarHeight>this.boxHeight?this.boxHeight-this.scrollbarTop:this.scrollbarHeight,this.scrollbarLeft=this.content.left/t*this.boxWidth,this.scrollbarLeft=this.scrollbarLeft<0?0:this.scrollbarLeft,this.scrollbarWidth=this.boxWidth/t*this.boxWidth,this.scrollbarWidth=this.scrollbarWidth+this.scrollbarLeft>this.boxWidth?this.boxWidth-this.scrollbarLeft:this.scrollbarWidth,this.isScrollbarVertical&&this.scrollbar.beginFill(this.options.scrollbarBackground,this.options.scrollbarBackgroundAlpha).drawRect(this.boxWidth-this.scrollbarSize+this.options.scrollbarOffsetVertical,0,this.scrollbarSize,this.boxHeight).endFill(),this.isScrollbarHorizontal&&this.scrollbar.beginFill(this.options.scrollbarBackground,this.options.scrollbarBackgroundAlpha).drawRect(0,this.boxHeight-this.scrollbarSize+this.options.scrollbarOffsetHorizontal,this.boxWidth,this.scrollbarSize).endFill(),this.isScrollbarVertical&&this.scrollbar.beginFill(this.options.scrollbarForeground,this.options.scrollbarForegroundAlpha).drawRect(this.boxWidth-this.scrollbarSize+this.options.scrollbarOffsetVertical,this.scrollbarTop,this.scrollbarSize,this.scrollbarHeight).endFill(),this.isScrollbarHorizontal&&this.scrollbar.beginFill(this.options.scrollbarForeground,this.options.scrollbarForegroundAlpha).drawRect(this.scrollbarLeft,this.boxHeight-this.scrollbarSize+this.options.scrollbarOffsetHorizontal,this.scrollbarWidth,this.scrollbarSize).endFill(),this.activateFade()}_drawMask(){this._maskContent.beginFill(0).drawRect(0,0,this.boxWidth,this.boxHeight).endFill(),this.content.mask=this._maskContent}update(){if(this.content.mask=null,this._maskContent.clear(),!this._disabled){this._drawScrollbars(),this._drawMask();const t=this.isScrollbarHorizontal&&this.isScrollbarVertical?"all":this.isScrollbarHorizontal?"x":"y";null!==t&&(this.options.dragScroll&&this.content.drag({clampWheel:this.options.clampWheel,direction:t}),this.content.clamp({direction:t,underflow:this.options.underflow}))}}updateLoop(t){if(this.fade){if(this.fade.wait>0){if(this.fade.wait-=t,!(this.fade.wait<=0))return;t+=this.fade.wait}this.fade.duration+=t,this.fade.duration>=this.options.fadeScrollbarTime?(this.fade=null,this.scrollbar.alpha=0):this.scrollbar.alpha=this.ease(this.fade.duration,1,-1,this.options.fadeScrollbarTime),this.content.dirty=!0}}get dirty(){return this.content.dirty}set dirty(t){this.content.dirty=t}activateFade(){!this.fade&&this.options.fade&&(this.scrollbar.alpha=1,this.fade={wait:this.options.fadeScrollboxWait,duration:0})}scrollbarDown(t){const i=this.toLocal(t.data.global);return this.isScrollbarHorizontal&&i.y>this.boxHeight-this.scrollbarSize?(i.x>=this.scrollbarLeft&&i.x<=this.scrollbarLeft+this.scrollbarWidth?this.pointerDown={type:"horizontal",last:i}:i.x>this.scrollbarLeft?(this.content.left+=this.content.worldScreenWidth,this.update()):(this.content.left-=this.content.worldScreenWidth,this.update()),void(this.options.stopPropagation&&t.stopPropagation())):this.isScrollbarVertical&&i.x>this.boxWidth-this.scrollbarSize?(i.y>=this.scrollbarTop&&i.y<=this.scrollbarTop+this.scrollbarWidth?this.pointerDown={type:"vertical",last:i}:i.y>this.scrollbarTop?(this.content.top+=this.content.worldScreenHeight,this.update()):(this.content.top-=this.content.worldScreenHeight,this.update()),void(this.options.stopPropagation&&t.stopPropagation())):void 0}scrollbarMove(t){if(this.pointerDown){if("horizontal"===this.pointerDown.type){const i=this.toLocal(t.data.global),o=this.scrollWidth+(this.isScrollbarVertical?this.options.scrollbarSize:0);this.scrollbarLeft+=i.x-this.pointerDown.last.x,this.content.left=this.scrollbarLeft/this.boxWidth*o,this.pointerDown.last=i,this.update()}else if("vertical"===this.pointerDown.type){const i=this.toLocal(t.data.global),o=this.scrollHeight+(this.isScrollbarHorizontal?this.options.scrollbarSize:0);this.scrollbarTop+=i.y-this.pointerDown.last.y,this.content.top=this.scrollbarTop/this.boxHeight*o,this.pointerDown.last=i,this.update()}this.options.stopPropagation&&t.stopPropagation()}}scrollbarUp(){this.pointerDown=null}resize(t){this.options.boxWidth=void 0!==t.boxWidth?t.boxWidth:this.options.boxWidth,this.options.boxHeight=void 0!==t.boxHeight?t.boxHeight:this.options.boxHeight,t.scrollWidth&&(this.scrollWidth=t.scrollWidth),t.scrollHeight&&(this.scrollHeight=t.scrollHeight),this.content.resize(this.options.boxWidth,this.options.boxHeight,this.scrollWidth,this.scrollHeight),this.update()}ensureVisible(t,i,o,s){this.content.ensureVisible(t,i,o,s),this._drawScrollbars()}}t.Scrollbox=a,Object.defineProperty(t,"__esModule",{value:!0})}));
|
|
2
|
-
//# sourceMappingURL=scrollbox.js.map
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("pixi.js"),require("pixi-viewport")):typeof define==`function`&&define.amd?define([`exports`,`pixi.js`,`pixi-viewport`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.Scrollbox={},e.PIXI,e.pixi_viewport))})(this,function(e,t,n){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var r=Object.create,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.getPrototypeOf,c=Object.prototype.hasOwnProperty,l=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t,t.exports),e=null),t.exports),u=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var s=o(t),l=0,u=s.length,d;l<u;l++)d=s[l],!c.call(e,d)&&d!==n&&i(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(r=a(t,d))||r.enumerable});return e},d=((e,t,n)=>(n=e==null?{}:r(s(e)),u(t||!e||!e.__esModule||!c.call(e,`default`)?i(n,`default`,{value:e,enumerable:!0}):n,e)))(l(((e,t,n)=>{(function(){var n={linear:function(e,t,n,r){return n*e/r+t},easeInQuad:function(e,t,n,r){return n*(e/=r)*e+t},easeOutQuad:function(e,t,n,r){return-n*(e/=r)*(e-2)+t},easeInOutQuad:function(e,t,n,r){return(e/=r/2)<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t},easeInCubic:function(e,t,n,r){return n*(e/=r)*e*e+t},easeOutCubic:function(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t},easeInOutCubic:function(e,t,n,r){return(e/=r/2)<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t},easeInQuart:function(e,t,n,r){return n*(e/=r)*e*e*e+t},easeOutQuart:function(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t},easeInOutQuart:function(e,t,n,r){return(e/=r/2)<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t},easeInQuint:function(e,t,n,r){return n*(e/=r)*e*e*e*e+t},easeOutQuint:function(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t},easeInOutQuint:function(e,t,n,r){return(e/=r/2)<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t},easeInSine:function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},easeOutSine:function(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t},easeInOutSine:function(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t},easeInExpo:function(e,t,n,r){return e===0?t:n*2**(10*(e/r-1))+t},easeOutExpo:function(e,t,n,r){return e===r?t+n:n*(-(2**(-10*e/r))+1)+t},easeInOutExpo:function(e,t,n,r){return e===r&&t+n,(e/=r/2)<1?n/2*2**(10*(e-1))+t:n/2*(-(2**(-10*--e))+2)+t},easeInCirc:function(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t},easeOutCirc:function(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t},easeInOutCirc:function(e,t,n,r){return(e/=r/2)<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t},easeInElastic:function(e,t,n,r){var i,a,o=1.70158;return a=0,i=n,e===0||(e/=r)===1&&t+n,a||=r*.3,i<Math.abs(n)?(i=n,o=a/4):o=a/(2*Math.PI)*Math.asin(n/i),-(i*2**(10*--e)*Math.sin((e*r-o)*(2*Math.PI)/a))+t},easeOutElastic:function(e,t,n,r){var i,a,o=1.70158;return a=0,i=n,e===0||(e/=r)===1&&t+n,a||=r*.3,i<Math.abs(n)?(i=n,o=a/4):o=a/(2*Math.PI)*Math.asin(n/i),i*2**(-10*e)*Math.sin((e*r-o)*(2*Math.PI)/a)+n+t},easeInOutElastic:function(e,t,n,r){var i,a,o=1.70158;return a=0,i=n,e===0||(e/=r/2)==2&&t+n,a||=.3*1.5*r,i<Math.abs(n)?(i=n,o=a/4):o=a/(2*Math.PI)*Math.asin(n/i),e<1?-.5*(i*2**(10*--e)*Math.sin((e*r-o)*(2*Math.PI)/a))+t:i*2**(-10*--e)*Math.sin((e*r-o)*(2*Math.PI)/a)*.5+n+t},easeInBack:function(e,t,n,r,i){return i===void 0&&(i=1.70158),n*(e/=r)*e*((i+1)*e-i)+t},easeOutBack:function(e,t,n,r,i){return i===void 0&&(i=1.70158),n*((e=e/r-1)*e*((i+1)*e+i)+1)+t},easeInOutBack:function(e,t,n,r,i){return i===void 0&&(i=1.70158),(e/=r/2)<1?n/2*(e*e*(((i*=1.525)+1)*e-i))+t:n/2*((e-=2)*e*(((i*=1.525)+1)*e+i)+2)+t},easeInBounce:function(e,t,r,i){return r-n.easeOutBounce(i-e,0,r,i)+t},easeOutBounce:function(e,t,n,r){return(e/=r)<1/2.75?n*(7.5625*e*e)+t:e<2/2.75?n*(7.5625*(e-=1.5/2.75)*e+.75)+t:e<2.5/2.75?n*(7.5625*(e-=2.25/2.75)*e+.9375)+t:n*(7.5625*(e-=2.625/2.75)*e+.984375)+t},easeInOutBounce:function(e,t,r,i){var a;return e<i/2?(a=n.easeInBounce(e*2,0,r,i),a*.5+t):(a=n.easeOutBounce(e*2-i,0,r,i),a*.5+r*.5+t)}};(function(n){return typeof e==`object`?t.exports=n:typeof define==`function`&&define.amd?define([],n):this.penner=n})(n)}).call(n)}))()),f={boxWidth:100,boxHeight:100,scrollbarSize:10,scrollbarBackground:14540253,scrollbarBackgroundAlpha:1,scrollbarForeground:8947848,scrollbarForegroundAlpha:1,dragScroll:!0,stopPropagation:!0,scrollbarOffsetHorizontal:0,scrollbarOffsetVertical:0,underflow:`top-left`,fade:!1,fadeScrollbarTime:1e3,fadeScrollboxWait:3e3,fadeScrollboxEase:`easeInOutSine`,passiveWheel:!1,clampWheel:!0,wheelSwapAxes:!1};e.Scrollbox=class extends t.Container{constructor(e={}){if(super(),this.options=Object.assign({},f,e),!this.options.events)throw Error(`pixi-scrollbox: options.events is required (e.g., new Scrollbox({ events: app.renderer.events }))`);e.overflow&&(this.options.overflowX=this.options.overflowY=e.overflow),e.fadeScrollbar&&(this.options.fade=!0),this.options.ticker=e.ticker||t.Ticker.shared,this.ease=typeof this.options.fadeScrollboxEase==`function`?this.options.fadeScrollboxEase:d.default[this.options.fadeScrollboxEase],this.content=this.addChild(new n.Viewport({passiveWheel:this.options.passiveWheel,stopPropagation:this.options.stopPropagation,screenWidth:this.options.boxWidth,screenHeight:this.options.boxHeight,events:this.options.events,noTicker:this.options.noTicker,ticker:this.options.ticker})),this.content.decelerate().on(`moved`,()=>this._drawScrollbars()),this.scrollbar=this.addChild(new t.Graphics),this.scrollbar.eventMode=`static`,this.scrollbar.hitArea={contains:(e,t)=>this._scrollbarContains(e,t)},this.scrollbar.on(`pointerdown`,this.scrollbarDown,this),this.scrollbar.on(`pointerup`,this.scrollbarUp,this),this.scrollbar.on(`pointerupoutside`,this.scrollbarUp,this),this.scrollbar.on(`pointercancel`,this.scrollbarUp,this),this._maskContent=this.addChild(new t.Graphics),this._maskContent.eventMode=`none`,this.update(),this.options.noTicker||(this.tickerFunction=()=>this.updateLoop(Math.min(this.options.ticker.elapsedMS,16.6667)),this.options.ticker.add(this.tickerFunction))}get scrollbarOffsetHorizontal(){return this.options.scrollbarOffsetHorizontal}set scrollbarOffsetHorizontal(e){this.options.scrollbarOffsetHorizontal=e}get scrollbarOffsetVertical(){return this.options.scrollbarOffsetVertical}set scrollbarOffsetVertical(e){this.options.scrollbarOffsetVertical=e}get disable(){return this._disabled}set disable(e){this._disabled!==e&&(this._disabled=e,this.update())}get stopPropagation(){return this.options.stopPropagation}set stopPropagation(e){this.options.stopPropagation=e,this.content.options.stopPropagation=e}get dragScroll(){return this.options.dragScroll}set dragScroll(e){this.options.dragScroll=e,e||this.content.plugins.remove(`drag`),this.update()}get boxWidth(){return this.options.boxWidth}set boxWidth(e){this.options.boxWidth=e,this.content.screenWidth=e,this.update()}get overflow(){return this.options.overflow}set overflow(e){this.options.overflow=e,this.options.overflowX=e,this.options.overflowY=e,this.update()}get overflowX(){return this.options.overflowX}set overflowX(e){this.options.overflowX=e,this.update()}get overflowY(){return this.options.overflowY}set overflowY(e){this.options.overflowY=e,this.update()}get boxHeight(){return this.options.boxHeight}set boxHeight(e){this.options.boxHeight=e,this.content.screenHeight=e,this.update()}get scrollbarSize(){return this.options.scrollbarSize}set scrollbarSize(e){this.options.scrollbarSize=e}get contentWidth(){return this.options.boxWidth-(this.isScrollbarVertical?this.options.scrollbarSize:0)}get contentHeight(){return this.options.boxHeight-(this.isScrollbarHorizontal?this.options.scrollbarSize:0)}get isScrollbarVertical(){return this._isScrollbarVertical}get isScrollbarHorizontal(){return this._isScrollbarHorizontal}get scrollTop(){return this.content.top}set scrollTop(e){this.content.top=e,this._clampAndDraw()}get scrollLeft(){return this.content.left}set scrollLeft(e){this.content.left=e,this._clampAndDraw()}get scrollWidth(){return this._scrollWidth||this.content.width}set scrollWidth(e){this._scrollWidth=e}get scrollHeight(){return this._scrollHeight||this.content.height}set scrollHeight(e){this._scrollHeight=e}_drawScrollbars(){this._isScrollbarHorizontal=this.overflowX===`scroll`||[`hidden`,`none`].indexOf(this.overflowX)===-1&&this.scrollWidth>this.options.boxWidth,this._isScrollbarVertical=this.overflowY===`scroll`||[`hidden`,`none`].indexOf(this.overflowY)===-1&&this.scrollHeight>this.options.boxHeight,this.scrollbar.clear();let e=this.scrollWidth+(this.isScrollbarVertical?this.options.scrollbarSize:0),t=this.scrollHeight+(this.isScrollbarHorizontal?this.options.scrollbarSize:0);this.scrollbarTop=this.content.top/t*this.boxHeight,this.scrollbarTop=this.scrollbarTop<0?0:this.scrollbarTop,this.scrollbarHeight=this.boxHeight/t*this.boxHeight,this.scrollbarHeight=this.scrollbarTop+this.scrollbarHeight>this.boxHeight?this.boxHeight-this.scrollbarTop:this.scrollbarHeight,this.scrollbarLeft=this.content.left/e*this.boxWidth,this.scrollbarLeft=this.scrollbarLeft<0?0:this.scrollbarLeft,this.scrollbarWidth=this.boxWidth/e*this.boxWidth,this.scrollbarWidth=this.scrollbarWidth+this.scrollbarLeft>this.boxWidth?this.boxWidth-this.scrollbarLeft:this.scrollbarWidth;let n={color:this.options.scrollbarBackground,alpha:this.options.scrollbarBackgroundAlpha},r={color:this.options.scrollbarForeground,alpha:this.options.scrollbarForegroundAlpha};this.isScrollbarVertical&&this.scrollbar.rect(this._scrollbarVerticalX,0,this.scrollbarSize,this.boxHeight).fill(n),this.isScrollbarHorizontal&&this.scrollbar.rect(0,this._scrollbarHorizontalY,this.boxWidth,this.scrollbarSize).fill(n),this.isScrollbarVertical&&this.scrollbar.rect(this._scrollbarVerticalX,this.scrollbarTop,this.scrollbarSize,this.scrollbarHeight).fill(r),this.isScrollbarHorizontal&&this.scrollbar.rect(this.scrollbarLeft,this._scrollbarHorizontalY,this.scrollbarWidth,this.scrollbarSize).fill(r),this.activateFade()}get _scrollbarVerticalX(){return this.boxWidth-this.scrollbarSize+this.options.scrollbarOffsetVertical}get _scrollbarHorizontalY(){return this.boxHeight-this.scrollbarSize+this.options.scrollbarOffsetHorizontal}_scrollbarContains(e,t){return this._disabled?!1:this.isScrollbarHorizontal&&this._overHorizontal(e,t)?!0:this.isScrollbarVertical&&this._overVertical(e,t)}_overHorizontal(e,t){return e>=0&&e<=this.boxWidth&&t>=this._scrollbarHorizontalY&&t<=this._scrollbarHorizontalY+this.scrollbarSize}_overVertical(e,t){return t>=0&&t<=this.boxHeight&&e>=this._scrollbarVerticalX&&e<=this._scrollbarVerticalX+this.scrollbarSize}_clampAndDraw(){let e=this.content.plugins.get(`clamp`,!0);e&&e.update(),this._drawScrollbars()}_drawMask(){this._maskContent.rect(0,0,this.boxWidth,this.boxHeight).fill(0),this.content.mask=this._maskContent}update(){if(this.content.mask=null,this._maskContent.clear(),this._disabled)this.scrollbar.clear();else{this._drawScrollbars(),this._drawMask();let e=this.isScrollbarHorizontal&&this.isScrollbarVertical?`all`:this.isScrollbarHorizontal?`x`:`y`;this.options.dragScroll&&this.content.drag({clampWheel:this.options.clampWheel,direction:e,wheelSwapAxes:this.options.wheelSwapAxes}),this.content.clamp({direction:e,underflow:this.options.underflow})}}updateLoop(e){if(this.options.noTicker&&this.content.update(e),this.fade){if(this.fade.wait>0){if(this.fade.wait-=e,this.fade.wait<=0)e=-this.fade.wait;else return}this.fade.duration+=e,this.fade.duration>=this.options.fadeScrollbarTime?(this.fade=null,this.scrollbar.alpha=0):this.scrollbar.alpha=this.ease(this.fade.duration,1,-1,this.options.fadeScrollbarTime),this.content.dirty=!0}}get dirty(){return this.content.dirty}set dirty(e){this.content.dirty=e}activateFade(){this.options.fade&&(this.scrollbar.alpha=1,this.fade={wait:this.options.fadeScrollboxWait,duration:0})}scrollbarDown(e){let t=this.toLocal(e.global);this.isScrollbarHorizontal&&this._overHorizontal(t.x,t.y)?(t.x>=this.scrollbarLeft&&t.x<=this.scrollbarLeft+this.scrollbarWidth?this._startScrollbarDrag(`horizontal`,t):(t.x>this.scrollbarLeft?this.content.left+=this.content.worldScreenWidth:this.content.left-=this.content.worldScreenWidth,this._clampAndDraw()),this.options.stopPropagation&&e.stopPropagation()):this.isScrollbarVertical&&this._overVertical(t.x,t.y)&&(t.y>=this.scrollbarTop&&t.y<=this.scrollbarTop+this.scrollbarHeight?this._startScrollbarDrag(`vertical`,t):(t.y>this.scrollbarTop?this.content.top+=this.content.worldScreenHeight:this.content.top-=this.content.worldScreenHeight,this._clampAndDraw()),this.options.stopPropagation&&e.stopPropagation())}_startScrollbarDrag(e,t){this.pointerDown={type:e,last:t},this.scrollbar.on(`globalpointermove`,this.scrollbarMove,this)}scrollbarMove(e){if(this.pointerDown){let t=this.toLocal(e.global);if(this.pointerDown.type===`horizontal`){let e=this.scrollWidth+(this.isScrollbarVertical?this.options.scrollbarSize:0);this.scrollbarLeft+=t.x-this.pointerDown.last.x,this.content.left=this.scrollbarLeft/this.boxWidth*e}else{let e=this.scrollHeight+(this.isScrollbarHorizontal?this.options.scrollbarSize:0);this.scrollbarTop+=t.y-this.pointerDown.last.y,this.content.top=this.scrollbarTop/this.boxHeight*e}this.pointerDown.last=t,this._clampAndDraw(),this.options.stopPropagation&&e.stopPropagation()}}scrollbarUp(){this.pointerDown=null,this.scrollbar.off(`globalpointermove`,this.scrollbarMove,this)}resize(e){this.options.boxWidth=e.boxWidth===void 0?this.options.boxWidth:e.boxWidth,this.options.boxHeight=e.boxHeight===void 0?this.options.boxHeight:e.boxHeight,e.scrollWidth&&(this.scrollWidth=e.scrollWidth),e.scrollHeight&&(this.scrollHeight=e.scrollHeight),this.content.resize(this.options.boxWidth,this.options.boxHeight,this.scrollWidth,this.scrollHeight),this.update()}ensureVisible(e,t,n,r){this.content.ensureVisible(e,t,n,r),this._drawScrollbars()}destroy(e){this.tickerFunction&&=(this.options.ticker.remove(this.tickerFunction),null),this.scrollbarUp(),this.content.destroy(e),super.destroy(e)}}});
|
|
2
|
+
//# sourceMappingURL=scrollbox.js.map
|
package/dist/scrollbox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollbox.js","sources":["../node_modules/penner/penner.js","../src/scrollbox.js"],"sourcesContent":["\n/*\n\tCopyright © 2001 Robert Penner\n\tAll rights reserved.\n\n\tRedistribution and use in source and binary forms, with or without modification, \n\tare permitted provided that the following conditions are met:\n\n\tRedistributions of source code must retain the above copyright notice, this list of \n\tconditions and the following disclaimer.\n\tRedistributions in binary form must reproduce the above copyright notice, this list \n\tof conditions and the following disclaimer in the documentation and/or other materials \n\tprovided with the distribution.\n\n\tNeither the name of the author nor the names of contributors may be used to endorse \n\tor promote products derived from this software without specific prior written permission.\n\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY \n\tEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n\tMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n\tCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\tEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n\tGOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED \n\tAND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n\tNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED \n\tOF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function() {\n var penner, umd;\n\n umd = function(factory) {\n if (typeof exports === 'object') {\n return module.exports = factory;\n } else if (typeof define === 'function' && define.amd) {\n return define([], factory);\n } else {\n return this.penner = factory;\n }\n };\n\n penner = {\n linear: function(t, b, c, d) {\n return c * t / d + b;\n },\n easeInQuad: function(t, b, c, d) {\n return c * (t /= d) * t + b;\n },\n easeOutQuad: function(t, b, c, d) {\n return -c * (t /= d) * (t - 2) + b;\n },\n easeInOutQuad: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t + b;\n } else {\n return -c / 2 * ((--t) * (t - 2) - 1) + b;\n }\n },\n easeInCubic: function(t, b, c, d) {\n return c * (t /= d) * t * t + b;\n },\n easeOutCubic: function(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t + 1) + b;\n },\n easeInOutCubic: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t + b;\n } else {\n return c / 2 * ((t -= 2) * t * t + 2) + b;\n }\n },\n easeInQuart: function(t, b, c, d) {\n return c * (t /= d) * t * t * t + b;\n },\n easeOutQuart: function(t, b, c, d) {\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n },\n easeInOutQuart: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t * t + b;\n } else {\n return -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n }\n },\n easeInQuint: function(t, b, c, d) {\n return c * (t /= d) * t * t * t * t + b;\n },\n easeOutQuint: function(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n },\n easeInOutQuint: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t * t * t + b;\n } else {\n return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n }\n },\n easeInSine: function(t, b, c, d) {\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n },\n easeOutSine: function(t, b, c, d) {\n return c * Math.sin(t / d * (Math.PI / 2)) + b;\n },\n easeInOutSine: function(t, b, c, d) {\n return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n },\n easeInExpo: function(t, b, c, d) {\n if (t === 0) {\n return b;\n } else {\n return c * Math.pow(2, 10 * (t / d - 1)) + b;\n }\n },\n easeOutExpo: function(t, b, c, d) {\n if (t === d) {\n return b + c;\n } else {\n return c * (-Math.pow(2, -10 * t / d) + 1) + b;\n }\n },\n easeInOutExpo: function(t, b, c, d) {\n if (t === 0) {\n b;\n }\n if (t === d) {\n b + c;\n }\n if ((t /= d / 2) < 1) {\n return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n } else {\n return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n }\n },\n easeInCirc: function(t, b, c, d) {\n return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n },\n easeOutCirc: function(t, b, c, d) {\n return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n },\n easeInOutCirc: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n } else {\n return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n }\n },\n easeInElastic: function(t, b, c, d) {\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n b;\n } else if ((t /= d) === 1) {\n b + c;\n }\n if (!p) {\n p = d * .3;\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n },\n easeOutElastic: function(t, b, c, d) {\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n b;\n } else if ((t /= d) === 1) {\n b + c;\n }\n if (!p) {\n p = d * .3;\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;\n },\n easeInOutElastic: function(t, b, c, d) {\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n b;\n } else if ((t /= d / 2) === 2) {\n b + c;\n }\n if (!p) {\n p = d * (.3 * 1.5);\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n if (t < 1) {\n return -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n } else {\n return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b;\n }\n },\n easeInBack: function(t, b, c, d, s) {\n if (s === void 0) {\n s = 1.70158;\n }\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\n },\n easeOutBack: function(t, b, c, d, s) {\n if (s === void 0) {\n s = 1.70158;\n }\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n },\n easeInOutBack: function(t, b, c, d, s) {\n if (s === void 0) {\n s = 1.70158;\n }\n if ((t /= d / 2) < 1) {\n return c / 2 * (t * t * (((s *= 1.525) + 1) * t - s)) + b;\n } else {\n return c / 2 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;\n }\n },\n easeInBounce: function(t, b, c, d) {\n var v;\n v = penner.easeOutBounce(d - t, 0, c, d);\n return c - v + b;\n },\n easeOutBounce: function(t, b, c, d) {\n if ((t /= d) < 1 / 2.75) {\n return c * (7.5625 * t * t) + b;\n } else if (t < 2 / 2.75) {\n return c * (7.5625 * (t -= 1.5 / 2.75) * t + .75) + b;\n } else if (t < 2.5 / 2.75) {\n return c * (7.5625 * (t -= 2.25 / 2.75) * t + .9375) + b;\n } else {\n return c * (7.5625 * (t -= 2.625 / 2.75) * t + .984375) + b;\n }\n },\n easeInOutBounce: function(t, b, c, d) {\n var v;\n if (t < d / 2) {\n v = penner.easeInBounce(t * 2, 0, c, d);\n return v * .5 + b;\n } else {\n v = penner.easeOutBounce(t * 2 - d, 0, c, d);\n return v * .5 + c * .5 + b;\n }\n }\n };\n\n umd(penner);\n\n}).call(this);\n","import * as PIXI from 'pixi.js'\nimport { Viewport } from 'pixi-viewport'\nimport Penner from 'penner'\n\nconst scrollboxOptions = {\n 'boxWidth': 100,\n 'boxHeight': 100,\n 'scrollbarSize': 10,\n 'scrollbarBackground': 14540253,\n 'scrollbarBackgroundAlpha': 1,\n 'scrollbarForeground': 8947848,\n 'scrollbarForegroundAlpha': 1,\n 'dragScroll': true,\n 'stopPropagation': true,\n 'scrollbarOffsetHorizontal': 0,\n 'scrollbarOffsetVertical': 0,\n 'underflow': 'top-left',\n 'fadeScrollbar': false,\n 'fadeScrollbarTime': 1000,\n 'fadeScrollboxWait': 3000,\n 'fadeScrollboxEase': 'easeInOutSine',\n 'passiveWheel': false,\n 'clampWheel': true\n}\n\n/**\n * pixi.js scrollbox: a masked content box that can scroll vertically or horizontally with scrollbars\n */\nexport class Scrollbox extends PIXI.Container {\n /**\n * create a scrollbox\n * @param {object} options\n * @param {boolean} [options.dragScroll=true] user may drag the content area to scroll content\n * @param {string} [options.overflowX=auto] (none, scroll, hidden, auto) this changes whether the scrollbar is shown\n * @param {string} [options.overflowY=auto] (none, scroll, hidden, auto) this changes whether the scrollbar is shown\n * @param {string} [options.overflow] (none, scroll, hidden, auto) sets overflowX and overflowY to this value\n * @param {number} [options.boxWidth=100] width of scrollbox including scrollbar (in pixels)\n * @param {number} [options.boxHeight=100] height of scrollbox including scrollbar (in pixels)\n * @param {number} [options.scrollbarSize=10] size of scrollbar (in pixels)\n * @param {number} [options.scrollbarOffsetHorizontal=0] offset of horizontal scrollbar (in pixels)\n * @param {number} [options.scrollbarOffsetVertical=0] offset of vertical scrollbar (in pixels)\n * @param {boolean} [options.stopPropagation=true] call stopPropagation on any events that impact scrollbox\n * @param {number} [options.scrollbarBackground=0xdddddd] background color of scrollbar\n * @param {number} [options.scrollbarBackgroundAlpha=1] alpha of background of scrollbar\n * @param {number} [options.scrollbarForeground=0x888888] foreground color of scrollbar\n * @param {number} [options.scrollbarForegroundAlpha=1] alpha of foreground of scrollbar\n * @param {string} [options.underflow=top-left] what to do when content underflows the scrollbox size: none: do nothing; (left/right/center AND top/bottom/center); OR center (e.g., 'top-left', 'center', 'none', 'bottomright')\n * @param {boolean} [options.noTicker] do not use PIXI.Ticker (for fade to work properly you will need to manually call updateLoop(elapsed) on each frame)\n * @param {PIXI.Ticker} [options.ticker=PIXI.Ticker.shared] use this PIXI.Ticker for updates\n * @param {boolean} [options.fade] fade the scrollbar when not in use\n * @param {number} [options.fadeScrollbarTime=1000] time to fade scrollbar if options.fade is set\n * @param {number} [options.fadeScrollboxWait=3000] time to wait before fading the scrollbar if options.fade is set\n * @param {(string|function)} [options.fadeScrollboxEase=easeInOutSine] easing function to use for fading\n * @param {boolean} [options.passiveWheel=false] whether wheel events are propogated beyond the scrollbox (NOTE: default is now false)\n * @param {boolean} [options.clampWheel=true] wheel events should be clamped (to avoid weird bounce with mouse wheel)\n * @param {PIXI.InteractionManager} [options.interaction] InteractionManager, available from instantiated PIXI.Renderer.plugins.interaction - used to calculate pointer postion relative to canvas location on screen\n * @param {HTMLElement} [options.divWheel] the HTMLElement to use for wheel interactions\n */\n constructor(options = {}) {\n super()\n this.options = Object.assign({}, scrollboxOptions, options)\n if (options.overflow) {\n this.options.overflowX = this.options.overflowY = options.overflow\n }\n this.ease = typeof this.options.fadeScrollboxEase === 'function' ? this.options.fadeScrollboxEase : Penner[this.options.fadeScrollboxEase]\n\n /**\n * content in placed in here\n * you can use any function from pixi-viewport on content to manually move the content (see https://davidfig.github.io/pixi-viewport/jsdoc/)\n * @type {Viewport}\n */\n this.content = this.addChild(new Viewport({\n passiveWheel: false,\n stopPropagation: this.options.stopPropagation,\n screenWidth: this.options.boxWidth,\n screenHeight: this.options.boxHeight,\n interaction: this.options.interaction,\n divWheel: this.options.divWheel,\n }))\n this.content\n .decelerate()\n .on('moved', () => this._drawScrollbars())\n\n // needed to pull this out of viewportOptions because of pixi.js v4 support (which changed from PIXI.ticker.shared to PIXI.Ticker.shared...sigh)\n if (options.ticker) {\n this.options.ticker = options.ticker\n }\n else {\n // to avoid Rollup transforming our import, save pixi namespace in a variable\n // from here: https://github.com/pixijs/pixi.js/issues/5757\n let ticker\n const pixiNS = PIXI\n if (parseInt(/^(\\d+)\\./.exec(PIXI.VERSION)[1]) < 5) {\n ticker = pixiNS.ticker.shared\n }\n else {\n ticker = pixiNS.Ticker.shared\n }\n this.options.ticker = options.ticker || ticker\n }\n\n /**\n * graphics element for drawing the scrollbars\n * @type {PIXI.Graphics}\n */\n this.scrollbar = this.addChild(new PIXI.Graphics())\n this.scrollbar.interactive = true\n this.scrollbar.on('pointerdown', this.scrollbarDown, this)\n this.interactive = true\n this.on('pointermove', this.scrollbarMove, this)\n this.on('pointerup', this.scrollbarUp, this)\n this.on('pointercancel', this.scrollbarUp, this)\n this.on('pointerupoutside', this.scrollbarUp, this)\n this._maskContent = this.addChild(new PIXI.Graphics())\n this.update()\n\n if (!this.options.noTicker) {\n this.tickerFunction = () => this.updateLoop(Math.min(this.options.ticker.elapsedMS, 16.6667))\n this.options.ticker.add(this.tickerFunction)\n }\n }\n\n /**\n * offset of horizontal scrollbar (in pixels)\n * @type {number}\n */\n get scrollbarOffsetHorizontal() {\n return this.options.scrollbarOffsetHorizontal\n }\n set scrollbarOffsetHorizontal(value) {\n this.options.scrollbarOffsetHorizontal = value\n }\n\n /**\n * offset of vertical scrollbar (in pixels)\n * @type {number}\n */\n get scrollbarOffsetVertical() {\n return this.options.scrollbarOffsetVertical\n }\n set scrollbarOffsetVertical(value) {\n this.options.scrollbarOffsetVertical = value\n }\n\n /**\n * disable the scrollbox (if set to true this will also remove the mask)\n * @type {boolean}\n */\n get disable() {\n return this._disabled\n }\n set disable(value) {\n if (this._disabled !== value) {\n this._disabled = value\n this.update()\n }\n }\n\n /**\n * call stopPropagation on any events that impact scrollbox\n * @type {boolean}\n */\n get stopPropagation() {\n return this.options.stopPropagation\n }\n set stopPropagation(value) {\n this.options.stopPropagation = value\n }\n\n /**\n * user may drag the content area to scroll content\n * @type {boolean}\n */\n get dragScroll() {\n return this.options.dragScroll\n }\n set dragScroll(value) {\n this.options.dragScroll = value\n if (value) {\n this.content.drag()\n }\n else {\n if (typeof this.content.removePlugin !== 'undefined') {\n this.content.removePlugin('drag')\n }\n else {\n this.content.plugins.remove('drag')\n }\n }\n this.update()\n }\n\n /**\n * width of scrollbox including the scrollbar (if visible)- this changes the size and not the scale of the box\n * @type {number}\n */\n get boxWidth() {\n return this.options.boxWidth\n }\n set boxWidth(value) {\n this.options.boxWidth = value\n this.content.screenWidth = value\n this.update()\n }\n\n /**\n * sets overflowX and overflowY to (scroll, hidden, auto) changing whether the scrollbar is shown\n * scroll = always show scrollbar\n * hidden = hide overflow and do not show scrollbar\n * auto = if content is larger than box size, then show scrollbar\n * @type {string}\n */\n get overflow() {\n return this.options.overflow\n }\n set overflow(value) {\n this.options.overflow = value\n this.options.overflowX = value\n this.options.overflowY = value\n this.update()\n }\n\n /**\n * sets overflowX to (scroll, hidden, auto) changing whether the scrollbar is shown\n * scroll = always show scrollbar\n * hidden = hide overflow and do not show scrollbar\n * auto = if content is larger than box size, then show scrollbar\n * @type {string}\n */\n get overflowX() {\n return this.options.overflowX\n }\n set overflowX(value) {\n this.options.overflowX = value\n this.update()\n }\n\n /**\n * sets overflowY to (scroll, hidden, auto) changing whether the scrollbar is shown\n * scroll = always show scrollbar\n * hidden = hide overflow and do not show scrollbar\n * auto = if content is larger than box size, then show scrollbar\n * @type {string}\n */\n get overflowY() {\n return this.options.overflowY\n }\n set overflowY(value) {\n this.options.overflowY = value\n this.update()\n }\n\n /**\n * height of scrollbox including the scrollbar (if visible) - this changes the size and not the scale of the box\n * @type {number}\n */\n get boxHeight() {\n return this.options.boxHeight\n }\n set boxHeight(value) {\n this.options.boxHeight = value\n this.content.screenHeight = value\n this.update()\n }\n\n /**\n * scrollbar size in pixels\n * @type {number}\n */\n get scrollbarSize() {\n return this.options.scrollbarSize\n }\n set scrollbarSize(value) {\n this.options.scrollbarSize = value\n }\n\n /**\n * width of scrollbox less the scrollbar (if visible)\n * @type {number}\n * @readonly\n */\n get contentWidth() {\n return this.options.boxWidth - (this.isScrollbarVertical ? this.options.scrollbarSize : 0)\n }\n\n /**\n * height of scrollbox less the scrollbar (if visible)\n * @type {number}\n * @readonly\n */\n get contentHeight() {\n return this.options.boxHeight - (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0)\n }\n\n /**\n * is the vertical scrollbar visible\n * @type {boolean}\n * @readonly\n */\n get isScrollbarVertical() {\n return this._isScrollbarVertical\n }\n\n /**\n * is the horizontal scrollbar visible\n * @type {boolean}\n * @readonly\n */\n get isScrollbarHorizontal() {\n return this._isScrollbarHorizontal\n }\n\n /**\n * top coordinate of scrollbar\n */\n get scrollTop() {\n return this.content.top\n }\n set scrollTop(top) {\n this.content.top = top\n this._drawScrollbars()\n }\n\n /**\n * left coordinate of scrollbar\n */\n get scrollLeft() {\n return this.content.left\n }\n set scrollLeft(left) {\n this.content.left = left\n this._drawScrollbars()\n }\n\n /**\n * width of content area\n * if not set then it uses content.width to calculate width\n */\n get scrollWidth() {\n return this._scrollWidth || this.content.width\n }\n set scrollWidth(value) {\n this._scrollWidth = value\n }\n\n /**\n * height of content area\n * if not set then it uses content.height to calculate height\n */\n get scrollHeight() {\n return this._scrollHeight || this.content.height\n }\n set scrollHeight(value) {\n this._scrollHeight = value\n }\n\n /**\n * draws scrollbars\n * @private\n */\n _drawScrollbars() {\n this._isScrollbarHorizontal = this.overflowX === 'scroll' ? true : ['hidden', 'none'].indexOf(this.overflowX) !== -1 ? false : this.scrollWidth > this.options.boxWidth\n this._isScrollbarVertical = this.overflowY === 'scroll' ? true : ['hidden', 'none'].indexOf(this.overflowY) !== -1 ? false : this.scrollHeight > this.options.boxHeight\n this.scrollbar.clear()\n let options = {}\n options.left = 0\n options.right = this.scrollWidth + (this._isScrollbarVertical ? this.options.scrollbarSize : 0)\n options.top = 0\n options.bottom = this.scrollHeight + (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0)\n const width = this.scrollWidth + (this.isScrollbarVertical ? this.options.scrollbarSize : 0)\n const height = this.scrollHeight + (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0)\n this.scrollbarTop = (this.content.top / height) * this.boxHeight\n this.scrollbarTop = this.scrollbarTop < 0 ? 0 : this.scrollbarTop\n this.scrollbarHeight = (this.boxHeight / height) * this.boxHeight\n this.scrollbarHeight = this.scrollbarTop + this.scrollbarHeight > this.boxHeight ? this.boxHeight - this.scrollbarTop : this.scrollbarHeight\n this.scrollbarLeft = (this.content.left / width) * this.boxWidth\n this.scrollbarLeft = this.scrollbarLeft < 0 ? 0 : this.scrollbarLeft\n this.scrollbarWidth = (this.boxWidth / width) * this.boxWidth\n this.scrollbarWidth = this.scrollbarWidth + this.scrollbarLeft > this.boxWidth ? this.boxWidth - this.scrollbarLeft : this.scrollbarWidth\n if (this.isScrollbarVertical) {\n this.scrollbar\n .beginFill(this.options.scrollbarBackground, this.options.scrollbarBackgroundAlpha)\n .drawRect(this.boxWidth - this.scrollbarSize + this.options.scrollbarOffsetVertical, 0, this.scrollbarSize, this.boxHeight)\n .endFill()\n }\n if (this.isScrollbarHorizontal) {\n this.scrollbar\n .beginFill(this.options.scrollbarBackground, this.options.scrollbarBackgroundAlpha)\n .drawRect(0, this.boxHeight - this.scrollbarSize + this.options.scrollbarOffsetHorizontal, this.boxWidth, this.scrollbarSize)\n .endFill()\n }\n if (this.isScrollbarVertical) {\n this.scrollbar\n .beginFill(this.options.scrollbarForeground, this.options.scrollbarForegroundAlpha)\n .drawRect(this.boxWidth - this.scrollbarSize + this.options.scrollbarOffsetVertical, this.scrollbarTop, this.scrollbarSize, this.scrollbarHeight)\n .endFill()\n }\n if (this.isScrollbarHorizontal) {\n this.scrollbar\n .beginFill(this.options.scrollbarForeground, this.options.scrollbarForegroundAlpha)\n .drawRect(this.scrollbarLeft, this.boxHeight - this.scrollbarSize + this.options.scrollbarOffsetHorizontal, this.scrollbarWidth, this.scrollbarSize)\n .endFill()\n }\n // this.content.forceHitArea = new PIXI.Rectangle(0, 0 , this.boxWidth, this.boxHeight)\n this.activateFade()\n }\n\n /**\n * draws mask layer\n * @private\n */\n _drawMask() {\n this._maskContent\n .beginFill(0)\n .drawRect(0, 0, this.boxWidth, this.boxHeight)\n .endFill()\n this.content.mask = this._maskContent\n }\n\n /**\n * call when scrollbox content changes\n */\n update() {\n this.content.mask = null\n this._maskContent.clear()\n if (!this._disabled) {\n this._drawScrollbars()\n this._drawMask()\n const direction = this.isScrollbarHorizontal && this.isScrollbarVertical ? 'all' : this.isScrollbarHorizontal ? 'x' : 'y'\n if (direction !== null) {\n if (this.options.dragScroll) {\n this.content.drag({ clampWheel: this.options.clampWheel, direction })\n }\n this.content.clamp({ direction, underflow: this.options.underflow })\n }\n }\n }\n\n /**\n * called on each frame to update fade scrollbars (if enabled)\n * @param {number} elapsed since last frame in milliseconds (usually capped at 16.6667)\n */\n updateLoop(elapsed) {\n if (this.fade) {\n if (this.fade.wait > 0) {\n this.fade.wait -= elapsed\n if (this.fade.wait <= 0) {\n elapsed += this.fade.wait\n }\n else {\n return\n }\n }\n this.fade.duration += elapsed\n if (this.fade.duration >= this.options.fadeScrollbarTime) {\n this.fade = null\n this.scrollbar.alpha = 0\n }\n else {\n this.scrollbar.alpha = this.ease(this.fade.duration, 1, -1, this.options.fadeScrollbarTime)\n }\n this.content.dirty = true\n }\n }\n\n /**\n * dirty value (used for optimizing draws) for underlying viewport (scrollbox.content)\n * @type {boolean}\n */\n get dirty() {\n return this.content.dirty\n }\n set dirty(value) {\n this.content.dirty = value\n }\n\n /**\n * show the scrollbar and restart the timer for fade if options.fade is set\n */\n activateFade() {\n if (!this.fade && this.options.fade) {\n this.scrollbar.alpha = 1\n this.fade = { wait: this.options.fadeScrollboxWait, duration: 0 }\n }\n }\n\n /**\n * handle pointer down on scrollbar\n * @param {PIXI.interaction.InteractionEvent} e\n * @private\n */\n scrollbarDown(e) {\n const local = this.toLocal(e.data.global)\n if (this.isScrollbarHorizontal) {\n if (local.y > this.boxHeight - this.scrollbarSize) {\n if (local.x >= this.scrollbarLeft && local.x <= this.scrollbarLeft + this.scrollbarWidth) {\n this.pointerDown = { type: 'horizontal', last: local }\n }\n else {\n if (local.x > this.scrollbarLeft) {\n this.content.left += this.content.worldScreenWidth\n this.update()\n }\n else {\n this.content.left -= this.content.worldScreenWidth\n this.update()\n }\n }\n if (this.options.stopPropagation) {\n e.stopPropagation()\n }\n return\n }\n }\n if (this.isScrollbarVertical) {\n if (local.x > this.boxWidth - this.scrollbarSize) {\n if (local.y >= this.scrollbarTop && local.y <= this.scrollbarTop + this.scrollbarWidth) {\n this.pointerDown = { type: 'vertical', last: local }\n }\n else {\n if (local.y > this.scrollbarTop) {\n this.content.top += this.content.worldScreenHeight\n this.update()\n }\n else {\n this.content.top -= this.content.worldScreenHeight\n this.update()\n }\n }\n if (this.options.stopPropagation) {\n e.stopPropagation()\n }\n return\n }\n }\n }\n\n /**\n * handle pointer move on scrollbar\n * @param {PIXI.interaction.InteractionEvent} e\n * @private\n */\n scrollbarMove(e) {\n if (this.pointerDown) {\n if (this.pointerDown.type === 'horizontal') {\n const local = this.toLocal(e.data.global)\n const width = this.scrollWidth + (this.isScrollbarVertical ? this.options.scrollbarSize : 0)\n this.scrollbarLeft += local.x - this.pointerDown.last.x\n this.content.left = this.scrollbarLeft / this.boxWidth * width\n this.pointerDown.last = local\n this.update()\n }\n else if (this.pointerDown.type === 'vertical') {\n const local = this.toLocal(e.data.global)\n const height = this.scrollHeight + (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0)\n this.scrollbarTop += local.y - this.pointerDown.last.y\n this.content.top = this.scrollbarTop / this.boxHeight * height\n this.pointerDown.last = local\n this.update()\n }\n if (this.options.stopPropagation) {\n e.stopPropagation()\n }\n }\n }\n\n /**\n * handle pointer down on scrollbar\n * @private\n */\n scrollbarUp() {\n this.pointerDown = null\n }\n\n /**\n * resize the mask for the container\n * @param {object} options\n * @param {number} [options.boxWidth] width of scrollbox including scrollbar (in pixels)\n * @param {number} [options.boxHeight] height of scrollbox including scrollbar (in pixels)\n * @param {number} [options.scrollWidth] set the width of the inside of the scrollbox (leave null to use content.width)\n * @param {number} [options.scrollHeight] set the height of the inside of the scrollbox (leave null to use content.height)\n */\n resize(options) {\n this.options.boxWidth = typeof options.boxWidth !== 'undefined' ? options.boxWidth : this.options.boxWidth\n this.options.boxHeight = typeof options.boxHeight !== 'undefined' ? options.boxHeight : this.options.boxHeight\n if (options.scrollWidth) {\n this.scrollWidth = options.scrollWidth\n }\n if (options.scrollHeight) {\n this.scrollHeight = options.scrollHeight\n }\n this.content.resize(this.options.boxWidth, this.options.boxHeight, this.scrollWidth, this.scrollHeight)\n this.update()\n }\n\n /**\n * ensure that the bounding box is visible\n * @param {number} x - relative to content's coordinate system\n * @param {number} y\n * @param {number} width\n * @param {number} height\n */\n ensureVisible(x, y, width, height) {\n this.content.ensureVisible(x, y, width, height)\n this._drawScrollbars()\n }\n}\n"],"names":["penner","factory","module","umd","linear","t","b","c","d","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","Math","cos","PI","easeOutSine","sin","easeInOutSine","easeInExpo","pow","easeOutExpo","easeInOutExpo","easeInCirc","sqrt","easeOutCirc","easeInOutCirc","easeInElastic","a","p","s","abs","asin","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","call","this","scrollboxOptions","boxWidth","boxHeight","scrollbarSize","scrollbarBackground","scrollbarBackgroundAlpha","scrollbarForeground","scrollbarForegroundAlpha","dragScroll","stopPropagation","scrollbarOffsetHorizontal","scrollbarOffsetVertical","underflow","fadeScrollbar","fadeScrollbarTime","fadeScrollboxWait","fadeScrollboxEase","passiveWheel","clampWheel","Scrollbox","PIXI","Container","[object Object]","options","super","Object","assign","overflow","overflowX","overflowY","ease","Penner","content","addChild","Viewport","screenWidth","screenHeight","interaction","divWheel","decelerate","on","_drawScrollbars","ticker","pixiNS","parseInt","exec","VERSION","shared","Ticker","scrollbar","Graphics","interactive","scrollbarDown","scrollbarMove","scrollbarUp","_maskContent","update","noTicker","tickerFunction","updateLoop","min","elapsedMS","add","value","disable","_disabled","drag","removePlugin","plugins","remove","contentWidth","isScrollbarVertical","contentHeight","isScrollbarHorizontal","_isScrollbarVertical","_isScrollbarHorizontal","scrollTop","top","scrollLeft","left","scrollWidth","_scrollWidth","width","scrollHeight","_scrollHeight","height","indexOf","clear","scrollbarTop","scrollbarHeight","scrollbarLeft","scrollbarWidth","beginFill","drawRect","endFill","activateFade","mask","_drawMask","direction","clamp","elapsed","fade","wait","duration","alpha","dirty","e","local","toLocal","data","global","y","x","pointerDown","type","last","worldScreenWidth","worldScreenHeight","resize","ensureVisible"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scrollbox.js","names":["Container","Ticker","Penner","Viewport","Graphics","factory","global","exports","__create","__defProp","__getOwnPropDesc","__getOwnPropNames","__getProtoOf","__hasOwnProp","__commonJSMin","mod","cb","__copyProps","from","keys","i","n","key","to","except","k","desc","import_penner","isNodeMode","target","penner","c","t","d","b","a","p","s","v","this$1","scrollboxOptions","\"boxWidth\"","\"boxHeight\"","\"scrollbarSize\"","\"scrollbarBackground\"","\"scrollbarBackgroundAlpha\"","\"scrollbarForeground\"","\"scrollbarForegroundAlpha\"","\"dragScroll\"","\"stopPropagation\"","\"scrollbarOffsetHorizontal\"","\"scrollbarOffsetVertical\"","\"underflow\"","\"fade\"","\"fadeScrollbarTime\"","\"fadeScrollboxWait\"","\"fadeScrollboxEase\"","\"passiveWheel\"","\"clampWheel\"","\"wheelSwapAxes\"","pixi_js","options","pixi_viewport","x","y","value","top","left","width","height","background","foreground","clamp","direction","elapsed","local"],"sources":["../node_modules/.pnpm/penner@0.1.3/node_modules/penner/penner.js","../src/scrollbox.js"],"sourcesContent":["\n/*\n\tCopyright © 2001 Robert Penner\n\tAll rights reserved.\n\n\tRedistribution and use in source and binary forms, with or without modification, \n\tare permitted provided that the following conditions are met:\n\n\tRedistributions of source code must retain the above copyright notice, this list of \n\tconditions and the following disclaimer.\n\tRedistributions in binary form must reproduce the above copyright notice, this list \n\tof conditions and the following disclaimer in the documentation and/or other materials \n\tprovided with the distribution.\n\n\tNeither the name of the author nor the names of contributors may be used to endorse \n\tor promote products derived from this software without specific prior written permission.\n\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY \n\tEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n\tMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n\tCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\tEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n\tGOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED \n\tAND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n\tNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED \n\tOF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function() {\n var penner, umd;\n\n umd = function(factory) {\n if (typeof exports === 'object') {\n return module.exports = factory;\n } else if (typeof define === 'function' && define.amd) {\n return define([], factory);\n } else {\n return this.penner = factory;\n }\n };\n\n penner = {\n linear: function(t, b, c, d) {\n return c * t / d + b;\n },\n easeInQuad: function(t, b, c, d) {\n return c * (t /= d) * t + b;\n },\n easeOutQuad: function(t, b, c, d) {\n return -c * (t /= d) * (t - 2) + b;\n },\n easeInOutQuad: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t + b;\n } else {\n return -c / 2 * ((--t) * (t - 2) - 1) + b;\n }\n },\n easeInCubic: function(t, b, c, d) {\n return c * (t /= d) * t * t + b;\n },\n easeOutCubic: function(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t + 1) + b;\n },\n easeInOutCubic: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t + b;\n } else {\n return c / 2 * ((t -= 2) * t * t + 2) + b;\n }\n },\n easeInQuart: function(t, b, c, d) {\n return c * (t /= d) * t * t * t + b;\n },\n easeOutQuart: function(t, b, c, d) {\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n },\n easeInOutQuart: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t * t + b;\n } else {\n return -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n }\n },\n easeInQuint: function(t, b, c, d) {\n return c * (t /= d) * t * t * t * t + b;\n },\n easeOutQuint: function(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n },\n easeInOutQuint: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t * t * t + b;\n } else {\n return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n }\n },\n easeInSine: function(t, b, c, d) {\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n },\n easeOutSine: function(t, b, c, d) {\n return c * Math.sin(t / d * (Math.PI / 2)) + b;\n },\n easeInOutSine: function(t, b, c, d) {\n return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n },\n easeInExpo: function(t, b, c, d) {\n if (t === 0) {\n return b;\n } else {\n return c * Math.pow(2, 10 * (t / d - 1)) + b;\n }\n },\n easeOutExpo: function(t, b, c, d) {\n if (t === d) {\n return b + c;\n } else {\n return c * (-Math.pow(2, -10 * t / d) + 1) + b;\n }\n },\n easeInOutExpo: function(t, b, c, d) {\n if (t === 0) {\n b;\n }\n if (t === d) {\n b + c;\n }\n if ((t /= d / 2) < 1) {\n return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n } else {\n return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n }\n },\n easeInCirc: function(t, b, c, d) {\n return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n },\n easeOutCirc: function(t, b, c, d) {\n return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n },\n easeInOutCirc: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n } else {\n return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n }\n },\n easeInElastic: function(t, b, c, d) {\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n b;\n } else if ((t /= d) === 1) {\n b + c;\n }\n if (!p) {\n p = d * .3;\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n },\n easeOutElastic: function(t, b, c, d) {\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n b;\n } else if ((t /= d) === 1) {\n b + c;\n }\n if (!p) {\n p = d * .3;\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;\n },\n easeInOutElastic: function(t, b, c, d) {\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n b;\n } else if ((t /= d / 2) === 2) {\n b + c;\n }\n if (!p) {\n p = d * (.3 * 1.5);\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n if (t < 1) {\n return -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n } else {\n return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b;\n }\n },\n easeInBack: function(t, b, c, d, s) {\n if (s === void 0) {\n s = 1.70158;\n }\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\n },\n easeOutBack: function(t, b, c, d, s) {\n if (s === void 0) {\n s = 1.70158;\n }\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n },\n easeInOutBack: function(t, b, c, d, s) {\n if (s === void 0) {\n s = 1.70158;\n }\n if ((t /= d / 2) < 1) {\n return c / 2 * (t * t * (((s *= 1.525) + 1) * t - s)) + b;\n } else {\n return c / 2 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;\n }\n },\n easeInBounce: function(t, b, c, d) {\n var v;\n v = penner.easeOutBounce(d - t, 0, c, d);\n return c - v + b;\n },\n easeOutBounce: function(t, b, c, d) {\n if ((t /= d) < 1 / 2.75) {\n return c * (7.5625 * t * t) + b;\n } else if (t < 2 / 2.75) {\n return c * (7.5625 * (t -= 1.5 / 2.75) * t + .75) + b;\n } else if (t < 2.5 / 2.75) {\n return c * (7.5625 * (t -= 2.25 / 2.75) * t + .9375) + b;\n } else {\n return c * (7.5625 * (t -= 2.625 / 2.75) * t + .984375) + b;\n }\n },\n easeInOutBounce: function(t, b, c, d) {\n var v;\n if (t < d / 2) {\n v = penner.easeInBounce(t * 2, 0, c, d);\n return v * .5 + b;\n } else {\n v = penner.easeOutBounce(t * 2 - d, 0, c, d);\n return v * .5 + c * .5 + b;\n }\n }\n };\n\n umd(penner);\n\n}).call(this);\n","import { Container, Graphics, Ticker } from 'pixi.js'\nimport { Viewport } from 'pixi-viewport'\nimport Penner from 'penner'\n\nconst scrollboxOptions = {\n 'boxWidth': 100,\n 'boxHeight': 100,\n 'scrollbarSize': 10,\n 'scrollbarBackground': 14540253,\n 'scrollbarBackgroundAlpha': 1,\n 'scrollbarForeground': 8947848,\n 'scrollbarForegroundAlpha': 1,\n 'dragScroll': true,\n 'stopPropagation': true,\n 'scrollbarOffsetHorizontal': 0,\n 'scrollbarOffsetVertical': 0,\n 'underflow': 'top-left',\n 'fade': false,\n 'fadeScrollbarTime': 1000,\n 'fadeScrollboxWait': 3000,\n 'fadeScrollboxEase': 'easeInOutSine',\n 'passiveWheel': false,\n 'clampWheel': true,\n 'wheelSwapAxes': false\n}\n\n/**\n * pixi.js scrollbox: a masked content box that can scroll vertically or horizontally with scrollbars\n */\nexport class Scrollbox extends Container {\n /**\n * create a scrollbox\n * @param {object} options\n * @param {PIXI.EventSystem} options.events the renderer's EventSystem (app.renderer.events); required by pixi-viewport for wheel and pointer positions\n * @param {boolean} [options.dragScroll=true] user may drag the content area to scroll content\n * @param {string} [options.overflowX=auto] (none, scroll, hidden, auto) this changes whether the scrollbar is shown\n * @param {string} [options.overflowY=auto] (none, scroll, hidden, auto) this changes whether the scrollbar is shown\n * @param {string} [options.overflow] (none, scroll, hidden, auto) sets overflowX and overflowY to this value\n * @param {number} [options.boxWidth=100] width of scrollbox including scrollbar (in pixels)\n * @param {number} [options.boxHeight=100] height of scrollbox including scrollbar (in pixels)\n * @param {number} [options.scrollbarSize=10] size of scrollbar (in pixels)\n * @param {number} [options.scrollbarOffsetHorizontal=0] offset of horizontal scrollbar (in pixels)\n * @param {number} [options.scrollbarOffsetVertical=0] offset of vertical scrollbar (in pixels)\n * @param {boolean} [options.stopPropagation=true] call stopPropagation on any events that impact scrollbox\n * @param {number} [options.scrollbarBackground=0xdddddd] background color of scrollbar\n * @param {number} [options.scrollbarBackgroundAlpha=1] alpha of background of scrollbar\n * @param {number} [options.scrollbarForeground=0x888888] foreground color of scrollbar\n * @param {number} [options.scrollbarForegroundAlpha=1] alpha of foreground of scrollbar\n * @param {string} [options.underflow=top-left] what to do when content underflows the scrollbox size: none: do nothing; (left/right/center AND top/bottom/center); OR center (e.g., 'top-left', 'center', 'none', 'bottomright')\n * @param {boolean} [options.noTicker] do not use PIXI.Ticker (you will need to manually call updateLoop(elapsed) on each frame)\n * @param {PIXI.Ticker} [options.ticker=PIXI.Ticker.shared] use this PIXI.Ticker for updates\n * @param {boolean} [options.fade] fade the scrollbar when not in use\n * @param {number} [options.fadeScrollbarTime=1000] time to fade scrollbar if options.fade is set\n * @param {number} [options.fadeScrollboxWait=3000] time to wait before fading the scrollbar if options.fade is set\n * @param {(string|function)} [options.fadeScrollboxEase=easeInOutSine] easing function to use for fading\n * @param {boolean} [options.passiveWheel=false] whether wheel events are propogated beyond the scrollbox (if false, e.preventDefault() is called when the wheel scrolls the scrollbox)\n * @param {boolean} [options.clampWheel=true] wheel events should be clamped (to avoid weird bounce with mouse wheel)\n * @param {boolean} [options.wheelSwapAxes=false] swap the wheel's x and y axes (e.g., so a mouse wheel scrolls a horizontal scrollbox)\n */\n constructor(options = {}) {\n super()\n this.options = Object.assign({}, scrollboxOptions, options)\n if (!this.options.events) {\n throw new Error('pixi-scrollbox: options.events is required (e.g., new Scrollbox({ events: app.renderer.events }))')\n }\n if (options.overflow) {\n this.options.overflowX = this.options.overflowY = options.overflow\n }\n if (options.fadeScrollbar) {\n this.options.fade = true\n }\n this.options.ticker = options.ticker || Ticker.shared\n this.ease = typeof this.options.fadeScrollboxEase === 'function' ? this.options.fadeScrollboxEase : Penner[this.options.fadeScrollboxEase]\n\n /**\n * content in placed in here\n * you can use any function from pixi-viewport on content to manually move the content (see https://viewport.pixijs.io/jsdoc/)\n * @type {Viewport}\n */\n this.content = this.addChild(new Viewport({\n passiveWheel: this.options.passiveWheel,\n stopPropagation: this.options.stopPropagation,\n screenWidth: this.options.boxWidth,\n screenHeight: this.options.boxHeight,\n events: this.options.events,\n noTicker: this.options.noTicker,\n ticker: this.options.ticker,\n }))\n this.content\n .decelerate()\n .on('moved', () => this._drawScrollbars())\n\n /**\n * graphics element for drawing the scrollbars\n * @type {PIXI.Graphics}\n */\n this.scrollbar = this.addChild(new Graphics())\n this.scrollbar.eventMode = 'static'\n this.scrollbar.hitArea = { contains: (x, y) => this._scrollbarContains(x, y) }\n this.scrollbar.on('pointerdown', this.scrollbarDown, this)\n this.scrollbar.on('pointerup', this.scrollbarUp, this)\n this.scrollbar.on('pointerupoutside', this.scrollbarUp, this)\n this.scrollbar.on('pointercancel', this.scrollbarUp, this)\n\n // the mask is only used for clipping, so it must never be the target of pointer events\n this._maskContent = this.addChild(new Graphics())\n this._maskContent.eventMode = 'none'\n this.update()\n\n if (!this.options.noTicker) {\n this.tickerFunction = () => this.updateLoop(Math.min(this.options.ticker.elapsedMS, 16.6667))\n this.options.ticker.add(this.tickerFunction)\n }\n }\n\n /**\n * offset of horizontal scrollbar (in pixels)\n * @type {number}\n */\n get scrollbarOffsetHorizontal() {\n return this.options.scrollbarOffsetHorizontal\n }\n set scrollbarOffsetHorizontal(value) {\n this.options.scrollbarOffsetHorizontal = value\n }\n\n /**\n * offset of vertical scrollbar (in pixels)\n * @type {number}\n */\n get scrollbarOffsetVertical() {\n return this.options.scrollbarOffsetVertical\n }\n set scrollbarOffsetVertical(value) {\n this.options.scrollbarOffsetVertical = value\n }\n\n /**\n * disable the scrollbox (if set to true this will also remove the mask)\n * @type {boolean}\n */\n get disable() {\n return this._disabled\n }\n set disable(value) {\n if (this._disabled !== value) {\n this._disabled = value\n this.update()\n }\n }\n\n /**\n * call stopPropagation on any events that impact scrollbox\n * @type {boolean}\n */\n get stopPropagation() {\n return this.options.stopPropagation\n }\n set stopPropagation(value) {\n this.options.stopPropagation = value\n this.content.options.stopPropagation = value\n }\n\n /**\n * user may drag the content area to scroll content\n * @type {boolean}\n */\n get dragScroll() {\n return this.options.dragScroll\n }\n set dragScroll(value) {\n this.options.dragScroll = value\n if (!value) {\n this.content.plugins.remove('drag')\n }\n this.update()\n }\n\n /**\n * width of scrollbox including the scrollbar (if visible)- this changes the size and not the scale of the box\n * @type {number}\n */\n get boxWidth() {\n return this.options.boxWidth\n }\n set boxWidth(value) {\n this.options.boxWidth = value\n this.content.screenWidth = value\n this.update()\n }\n\n /**\n * sets overflowX and overflowY to (scroll, hidden, auto) changing whether the scrollbar is shown\n * scroll = always show scrollbar\n * hidden = hide overflow and do not show scrollbar\n * auto = if content is larger than box size, then show scrollbar\n * @type {string}\n */\n get overflow() {\n return this.options.overflow\n }\n set overflow(value) {\n this.options.overflow = value\n this.options.overflowX = value\n this.options.overflowY = value\n this.update()\n }\n\n /**\n * sets overflowX to (scroll, hidden, auto) changing whether the scrollbar is shown\n * scroll = always show scrollbar\n * hidden = hide overflow and do not show scrollbar\n * auto = if content is larger than box size, then show scrollbar\n * @type {string}\n */\n get overflowX() {\n return this.options.overflowX\n }\n set overflowX(value) {\n this.options.overflowX = value\n this.update()\n }\n\n /**\n * sets overflowY to (scroll, hidden, auto) changing whether the scrollbar is shown\n * scroll = always show scrollbar\n * hidden = hide overflow and do not show scrollbar\n * auto = if content is larger than box size, then show scrollbar\n * @type {string}\n */\n get overflowY() {\n return this.options.overflowY\n }\n set overflowY(value) {\n this.options.overflowY = value\n this.update()\n }\n\n /**\n * height of scrollbox including the scrollbar (if visible) - this changes the size and not the scale of the box\n * @type {number}\n */\n get boxHeight() {\n return this.options.boxHeight\n }\n set boxHeight(value) {\n this.options.boxHeight = value\n this.content.screenHeight = value\n this.update()\n }\n\n /**\n * scrollbar size in pixels\n * @type {number}\n */\n get scrollbarSize() {\n return this.options.scrollbarSize\n }\n set scrollbarSize(value) {\n this.options.scrollbarSize = value\n }\n\n /**\n * width of scrollbox less the scrollbar (if visible)\n * @type {number}\n * @readonly\n */\n get contentWidth() {\n return this.options.boxWidth - (this.isScrollbarVertical ? this.options.scrollbarSize : 0)\n }\n\n /**\n * height of scrollbox less the scrollbar (if visible)\n * @type {number}\n * @readonly\n */\n get contentHeight() {\n return this.options.boxHeight - (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0)\n }\n\n /**\n * is the vertical scrollbar visible\n * @type {boolean}\n * @readonly\n */\n get isScrollbarVertical() {\n return this._isScrollbarVertical\n }\n\n /**\n * is the horizontal scrollbar visible\n * @type {boolean}\n * @readonly\n */\n get isScrollbarHorizontal() {\n return this._isScrollbarHorizontal\n }\n\n /**\n * top coordinate of scrollbar\n */\n get scrollTop() {\n return this.content.top\n }\n set scrollTop(top) {\n this.content.top = top\n this._clampAndDraw()\n }\n\n /**\n * left coordinate of scrollbar\n */\n get scrollLeft() {\n return this.content.left\n }\n set scrollLeft(left) {\n this.content.left = left\n this._clampAndDraw()\n }\n\n /**\n * width of content area\n * if not set then it uses content.width to calculate width\n */\n get scrollWidth() {\n return this._scrollWidth || this.content.width\n }\n set scrollWidth(value) {\n this._scrollWidth = value\n }\n\n /**\n * height of content area\n * if not set then it uses content.height to calculate height\n */\n get scrollHeight() {\n return this._scrollHeight || this.content.height\n }\n set scrollHeight(value) {\n this._scrollHeight = value\n }\n\n /**\n * draws scrollbars\n * @private\n */\n _drawScrollbars() {\n this._isScrollbarHorizontal = this.overflowX === 'scroll' ? true : ['hidden', 'none'].indexOf(this.overflowX) !== -1 ? false : this.scrollWidth > this.options.boxWidth\n this._isScrollbarVertical = this.overflowY === 'scroll' ? true : ['hidden', 'none'].indexOf(this.overflowY) !== -1 ? false : this.scrollHeight > this.options.boxHeight\n this.scrollbar.clear()\n const width = this.scrollWidth + (this.isScrollbarVertical ? this.options.scrollbarSize : 0)\n const height = this.scrollHeight + (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0)\n this.scrollbarTop = (this.content.top / height) * this.boxHeight\n this.scrollbarTop = this.scrollbarTop < 0 ? 0 : this.scrollbarTop\n this.scrollbarHeight = (this.boxHeight / height) * this.boxHeight\n this.scrollbarHeight = this.scrollbarTop + this.scrollbarHeight > this.boxHeight ? this.boxHeight - this.scrollbarTop : this.scrollbarHeight\n this.scrollbarLeft = (this.content.left / width) * this.boxWidth\n this.scrollbarLeft = this.scrollbarLeft < 0 ? 0 : this.scrollbarLeft\n this.scrollbarWidth = (this.boxWidth / width) * this.boxWidth\n this.scrollbarWidth = this.scrollbarWidth + this.scrollbarLeft > this.boxWidth ? this.boxWidth - this.scrollbarLeft : this.scrollbarWidth\n const background = { color: this.options.scrollbarBackground, alpha: this.options.scrollbarBackgroundAlpha }\n const foreground = { color: this.options.scrollbarForeground, alpha: this.options.scrollbarForegroundAlpha }\n if (this.isScrollbarVertical) {\n this.scrollbar\n .rect(this._scrollbarVerticalX, 0, this.scrollbarSize, this.boxHeight)\n .fill(background)\n }\n if (this.isScrollbarHorizontal) {\n this.scrollbar\n .rect(0, this._scrollbarHorizontalY, this.boxWidth, this.scrollbarSize)\n .fill(background)\n }\n if (this.isScrollbarVertical) {\n this.scrollbar\n .rect(this._scrollbarVerticalX, this.scrollbarTop, this.scrollbarSize, this.scrollbarHeight)\n .fill(foreground)\n }\n if (this.isScrollbarHorizontal) {\n this.scrollbar\n .rect(this.scrollbarLeft, this._scrollbarHorizontalY, this.scrollbarWidth, this.scrollbarSize)\n .fill(foreground)\n }\n this.activateFade()\n }\n\n /**\n * x-coordinate of the vertical scrollbar\n * @private\n */\n get _scrollbarVerticalX() {\n return this.boxWidth - this.scrollbarSize + this.options.scrollbarOffsetVertical\n }\n\n /**\n * y-coordinate of the horizontal scrollbar\n * @private\n */\n get _scrollbarHorizontalY() {\n return this.boxHeight - this.scrollbarSize + this.options.scrollbarOffsetHorizontal\n }\n\n /**\n * whether a point (in the scrollbox's coordinates) is over a visible scrollbar\n * used as the scrollbar's hitArea so it works even when the scrollbar is transparent\n * @private\n */\n _scrollbarContains(x, y) {\n if (this._disabled) {\n return false\n }\n if (this.isScrollbarHorizontal && this._overHorizontal(x, y)) {\n return true\n }\n return this.isScrollbarVertical && this._overVertical(x, y)\n }\n\n /** @private */\n _overHorizontal(x, y) {\n return x >= 0 && x <= this.boxWidth && y >= this._scrollbarHorizontalY && y <= this._scrollbarHorizontalY + this.scrollbarSize\n }\n\n /** @private */\n _overVertical(x, y) {\n return y >= 0 && y <= this.boxHeight && x >= this._scrollbarVerticalX && x <= this._scrollbarVerticalX + this.scrollbarSize\n }\n\n /**\n * clamps the content after moving it directly and redraws the scrollbars\n * @private\n */\n _clampAndDraw() {\n const clamp = this.content.plugins.get('clamp', true)\n if (clamp) {\n clamp.update()\n }\n this._drawScrollbars()\n }\n\n /**\n * draws mask layer\n * @private\n */\n _drawMask() {\n this._maskContent\n .rect(0, 0, this.boxWidth, this.boxHeight)\n .fill(0)\n this.content.mask = this._maskContent\n }\n\n /**\n * call when scrollbox content changes\n */\n update() {\n this.content.mask = null\n this._maskContent.clear()\n if (!this._disabled) {\n this._drawScrollbars()\n this._drawMask()\n const direction = this.isScrollbarHorizontal && this.isScrollbarVertical ? 'all' : this.isScrollbarHorizontal ? 'x' : 'y'\n if (this.options.dragScroll) {\n this.content.drag({ clampWheel: this.options.clampWheel, direction, wheelSwapAxes: this.options.wheelSwapAxes })\n }\n this.content.clamp({ direction, underflow: this.options.underflow })\n }\n else {\n this.scrollbar.clear()\n }\n }\n\n /**\n * called on each frame to update fade scrollbars (if enabled)\n * if options.noTicker is set then call this on each frame (it also updates the underlying viewport)\n * @param {number} elapsed since last frame in milliseconds (usually capped at 16.6667)\n */\n updateLoop(elapsed) {\n if (this.options.noTicker) {\n this.content.update(elapsed)\n }\n if (this.fade) {\n if (this.fade.wait > 0) {\n this.fade.wait -= elapsed\n if (this.fade.wait <= 0) {\n elapsed = -this.fade.wait\n }\n else {\n return\n }\n }\n this.fade.duration += elapsed\n if (this.fade.duration >= this.options.fadeScrollbarTime) {\n this.fade = null\n this.scrollbar.alpha = 0\n }\n else {\n this.scrollbar.alpha = this.ease(this.fade.duration, 1, -1, this.options.fadeScrollbarTime)\n }\n this.content.dirty = true\n }\n }\n\n /**\n * dirty value (used for optimizing draws) for underlying viewport (scrollbox.content)\n * @type {boolean}\n */\n get dirty() {\n return this.content.dirty\n }\n set dirty(value) {\n this.content.dirty = value\n }\n\n /**\n * show the scrollbar and restart the timer for fade if options.fade is set\n */\n activateFade() {\n if (this.options.fade) {\n this.scrollbar.alpha = 1\n this.fade = { wait: this.options.fadeScrollboxWait, duration: 0 }\n }\n }\n\n /**\n * handle pointer down on scrollbar\n * @param {PIXI.FederatedPointerEvent} e\n * @private\n */\n scrollbarDown(e) {\n const local = this.toLocal(e.global)\n if (this.isScrollbarHorizontal && this._overHorizontal(local.x, local.y)) {\n if (local.x >= this.scrollbarLeft && local.x <= this.scrollbarLeft + this.scrollbarWidth) {\n this._startScrollbarDrag('horizontal', local)\n }\n else {\n if (local.x > this.scrollbarLeft) {\n this.content.left += this.content.worldScreenWidth\n }\n else {\n this.content.left -= this.content.worldScreenWidth\n }\n this._clampAndDraw()\n }\n if (this.options.stopPropagation) {\n e.stopPropagation()\n }\n return\n }\n if (this.isScrollbarVertical && this._overVertical(local.x, local.y)) {\n if (local.y >= this.scrollbarTop && local.y <= this.scrollbarTop + this.scrollbarHeight) {\n this._startScrollbarDrag('vertical', local)\n }\n else {\n if (local.y > this.scrollbarTop) {\n this.content.top += this.content.worldScreenHeight\n }\n else {\n this.content.top -= this.content.worldScreenHeight\n }\n this._clampAndDraw()\n }\n if (this.options.stopPropagation) {\n e.stopPropagation()\n }\n }\n }\n\n /**\n * start dragging a scrollbar; listens to moves anywhere on the stage until the pointer is released\n * @private\n */\n _startScrollbarDrag(type, local) {\n this.pointerDown = { type, last: local }\n this.scrollbar.on('globalpointermove', this.scrollbarMove, this)\n }\n\n /**\n * handle pointer move on scrollbar\n * @param {PIXI.FederatedPointerEvent} e\n * @private\n */\n scrollbarMove(e) {\n if (this.pointerDown) {\n const local = this.toLocal(e.global)\n if (this.pointerDown.type === 'horizontal') {\n const width = this.scrollWidth + (this.isScrollbarVertical ? this.options.scrollbarSize : 0)\n this.scrollbarLeft += local.x - this.pointerDown.last.x\n this.content.left = this.scrollbarLeft / this.boxWidth * width\n }\n else {\n const height = this.scrollHeight + (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0)\n this.scrollbarTop += local.y - this.pointerDown.last.y\n this.content.top = this.scrollbarTop / this.boxHeight * height\n }\n this.pointerDown.last = local\n this._clampAndDraw()\n if (this.options.stopPropagation) {\n e.stopPropagation()\n }\n }\n }\n\n /**\n * handle pointer up on scrollbar\n * @private\n */\n scrollbarUp() {\n this.pointerDown = null\n this.scrollbar.off('globalpointermove', this.scrollbarMove, this)\n }\n\n /**\n * resize the mask for the container\n * @param {object} options\n * @param {number} [options.boxWidth] width of scrollbox including scrollbar (in pixels)\n * @param {number} [options.boxHeight] height of scrollbox including scrollbar (in pixels)\n * @param {number} [options.scrollWidth] set the width of the inside of the scrollbox (leave null to use content.width)\n * @param {number} [options.scrollHeight] set the height of the inside of the scrollbox (leave null to use content.height)\n */\n resize(options) {\n this.options.boxWidth = typeof options.boxWidth !== 'undefined' ? options.boxWidth : this.options.boxWidth\n this.options.boxHeight = typeof options.boxHeight !== 'undefined' ? options.boxHeight : this.options.boxHeight\n if (options.scrollWidth) {\n this.scrollWidth = options.scrollWidth\n }\n if (options.scrollHeight) {\n this.scrollHeight = options.scrollHeight\n }\n this.content.resize(this.options.boxWidth, this.options.boxHeight, this.scrollWidth, this.scrollHeight)\n this.update()\n }\n\n /**\n * ensure that the bounding box is visible\n * @param {number} x - relative to content's coordinate system\n * @param {number} y\n * @param {number} width\n * @param {number} height\n */\n ensureVisible(x, y, width, height) {\n this.content.ensureVisible(x, y, width, height)\n this._drawScrollbars()\n }\n\n /**\n * removes the ticker and the viewport's wheel listener, then destroys the scrollbox\n * @param {PIXI.DestroyOptions} [options]\n */\n destroy(options) {\n if (this.tickerFunction) {\n this.options.ticker.remove(this.tickerFunction)\n this.tickerFunction = null\n }\n this.scrollbarUp()\n this.content.destroy(options)\n super.destroy(options)\n }\n}\n"],"ignoreList":[0],"mappings":"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"}
|