Skip to content

Commit 95007c9

Browse files
committed
- tweak scroll controller speed
- add sample code for overscrolling - bump version
1 parent 0c28971 commit 95007c9

File tree

8 files changed

+91
-23
lines changed

8 files changed

+91
-23
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Change Logs
22

3+
## v0.6.5
4+
5+
- tweak scroll controller speed
6+
- add sample code for overscrolling
7+
8+
39
## v0.6.4
410

511
- bug fix: check `ccfg` existence before using it

dist/index.js

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,16 @@
479479
});
480480
_obj = this;
481481
this._slider = {
482+
hc: function(evt){
483+
var box, c, d;
484+
box = evt.target.getBoundingClientRect();
485+
c = box[this.t[3]] + box[this.t[4]] / 2;
486+
d = this.dir * Math.sign(evt[this.t[2]] - c);
487+
_obj[d < 0
488+
? this.t[1]
489+
: this.t[0]](1);
490+
return _obj.renderSelection();
491+
},
482492
hd: function(evt){
483493
var this$ = this;
484494
this.on = true;
@@ -496,12 +506,23 @@
496506
return document.removeEventListener('mousemove', this.hm);
497507
},
498508
hm: function(evt){
499-
var d, v, ref$;
509+
var d, u, v;
500510
if (!this.on) {
501511
return;
502512
}
503513
d = this.p - evt[this.t[2]];
504-
v = Math.sign(d) * this.dir * Math.round(Math.log((ref$ = Math.abs(d)) > 1 ? ref$ : 1));
514+
u = Math.abs(d);
515+
u = u > 500
516+
? 10
517+
: u > 300
518+
? 5
519+
: u > 150
520+
? 2
521+
: u > 100 ? 1 : 0.3;
522+
if (u < 1) {
523+
u = Math.random() < u ? 1 : 0;
524+
}
525+
v = Math.sign(d) * this.dir * u;
505526
if (v > 0) {
506527
_obj[this.t[1]](v);
507528
}
@@ -515,20 +536,23 @@
515536
n: 'slide-y',
516537
on: false,
517538
p: 0,
518-
t: ['_mu', '_md', 'clientY'],
539+
t: ['_mu', '_md', 'clientY', 'y', 'height'],
519540
dir: -1
520-
}, ref1$.hd = (ref$ = this._slider).hd, ref1$.hu = ref$.hu, ref1$.hm = ref$.hm, ref1$);
541+
}, ref1$.hd = (ref$ = this._slider).hd, ref1$.hu = ref$.hu, ref1$.hm = ref$.hm, ref1$.hc = ref$.hc, ref1$);
521542
this._slider.x = (ref2$ = {
522543
n: 'slide-x',
523544
on: false,
524545
p: 0,
525-
t: ['_mr', '_ml', 'clientX'],
546+
t: ['_mr', '_ml', 'clientX', 'x', 'width'],
526547
dir: 1
527-
}, ref2$.hd = (ref1$ = this._slider).hd, ref2$.hu = ref1$.hu, ref2$.hm = ref1$.hm, ref2$);
548+
}, ref2$.hd = (ref1$ = this._slider).hd, ref2$.hu = ref1$.hu, ref2$.hm = ref1$.hm, ref2$.hc = ref1$.hc, ref2$);
528549
['x', 'y'].map(function(n){
529-
return this$.dom[this$._slider[n].n].addEventListener('mousedown', function(e){
550+
this$.dom[this$._slider[n].n].addEventListener('mousedown', function(e){
530551
return this$._slider[n].hd(e);
531552
});
553+
return this$.dom[this$._slider[n].n].addEventListener('click', function(e){
554+
return this$._slider[n].hc(e);
555+
});
532556
});
533557
return document.addEventListener('wheel', function(e){
534558
var inscope, spos, ref$, dx, dy, ox, oy;

dist/index.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"name": "@plotdb/sheet",
44
"license": "MIT",
55
"description": "spreadsheet",
6-
"version": "0.6.4",
6+
"version": "0.6.5",
77
"style": "dist/index.min.css",
88
"browser": "dist/index.min.js",
99
"main": "dist/index.min.js",

src/index.ls

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,12 @@ sheet.prototype = Object.create(Object.prototype) <<< do
230230

231231
_obj = @
232232
@_slider =
233+
hc: (evt) ->
234+
box = evt.target.getBoundingClientRect!
235+
c = box[@t.3] + (box[@t.4] / 2)
236+
d = @dir * Math.sign(evt[@t.2] - c)
237+
_obj[if d < 0 => @t.1 else @t.0](1)
238+
_obj.render-selection!
233239
hd: (evt) ->
234240
@ <<< on: true, p: evt[@t.2]
235241
document.addEventListener \mouseup, (e) ~> @hu e
@@ -241,14 +247,19 @@ sheet.prototype = Object.create(Object.prototype) <<< do
241247
hm: (evt) ->
242248
if !@on => return
243249
d = @p - evt[@t.2]
244-
v = Math.sign(d) * @dir * Math.round(Math.log(Math.abs(d) >? 1))
250+
u = Math.abs(d)
251+
u = if u > 500 => 10 else if u > 300 => 5 else if u > 150 => 2 else if u > 100 => 1 else 0.3
252+
if u < 1 => u = if Math.random! < u => 1 else 0
253+
v = Math.sign(d) * @dir * u
245254
if v > 0 => _obj[@t.1] v
246255
if v < 0 => _obj[@t.0] v
247256
_obj.render-selection!
248-
@_slider.y = {n: \slide-y, on: false, p: 0, t: <[_mu _md clientY]>, dir: -1} <<< @_slider{hd, hu, hm}
249-
@_slider.x = {n: \slide-x, on: false, p: 0, t: <[_mr _ml clientX]>, dir: 1} <<< @_slider{hd, hu, hm}
257+
@_slider.y = {n: \slide-y, on: false, p: 0, t: <[_mu _md clientY y height]>, dir: -1} <<< @_slider{hd, hu, hm, hc}
258+
@_slider.x = {n: \slide-x, on: false, p: 0, t: <[_mr _ml clientX x width]>, dir: 1} <<< @_slider{hd, hu, hm, hc}
250259

251-
<[x y]>.map (n) ~> @dom[@_slider[n].n].addEventListener \mousedown, (e) ~> @_slider[n].hd e
260+
<[x y]>.map (n) ~>
261+
@dom[@_slider[n].n].addEventListener \mousedown, (e) ~> @_slider[n].hd e
262+
@dom[@_slider[n].n].addEventListener \click, (e) ~> @_slider[n].hc e
252263

253264
document.addEventListener \wheel, ((e) ~>
254265
# we should block wheel event only if target element is under sheet.
@@ -281,6 +292,9 @@ sheet.prototype = Object.create(Object.prototype) <<< do
281292
else if dx > 0 => @_mr dx
282293
else if dx < 0 => @_ml dx
283294
@render-selection!
295+
# # if we want to overscroll
296+
# if @pos.row == 0 and e.deltaY < 0 => return
297+
# if @pos.col == 0 and e.deltaX < 0 => return
284298
# despite the above hack, we still preventDefault here for default behavior.
285299
# that is, once users are scrolling in sheet, the event should not trigger default behavior.
286300
e.preventDefault!

web/static/assets/lib/@plotdb/sheet/dev/index.js

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,16 @@
479479
});
480480
_obj = this;
481481
this._slider = {
482+
hc: function(evt){
483+
var box, c, d;
484+
box = evt.target.getBoundingClientRect();
485+
c = box[this.t[3]] + box[this.t[4]] / 2;
486+
d = this.dir * Math.sign(evt[this.t[2]] - c);
487+
_obj[d < 0
488+
? this.t[1]
489+
: this.t[0]](1);
490+
return _obj.renderSelection();
491+
},
482492
hd: function(evt){
483493
var this$ = this;
484494
this.on = true;
@@ -496,12 +506,23 @@
496506
return document.removeEventListener('mousemove', this.hm);
497507
},
498508
hm: function(evt){
499-
var d, v, ref$;
509+
var d, u, v;
500510
if (!this.on) {
501511
return;
502512
}
503513
d = this.p - evt[this.t[2]];
504-
v = Math.sign(d) * this.dir * Math.round(Math.log((ref$ = Math.abs(d)) > 1 ? ref$ : 1));
514+
u = Math.abs(d);
515+
u = u > 500
516+
? 10
517+
: u > 300
518+
? 5
519+
: u > 150
520+
? 2
521+
: u > 100 ? 1 : 0.3;
522+
if (u < 1) {
523+
u = Math.random() < u ? 1 : 0;
524+
}
525+
v = Math.sign(d) * this.dir * u;
505526
if (v > 0) {
506527
_obj[this.t[1]](v);
507528
}
@@ -515,20 +536,23 @@
515536
n: 'slide-y',
516537
on: false,
517538
p: 0,
518-
t: ['_mu', '_md', 'clientY'],
539+
t: ['_mu', '_md', 'clientY', 'y', 'height'],
519540
dir: -1
520-
}, ref1$.hd = (ref$ = this._slider).hd, ref1$.hu = ref$.hu, ref1$.hm = ref$.hm, ref1$);
541+
}, ref1$.hd = (ref$ = this._slider).hd, ref1$.hu = ref$.hu, ref1$.hm = ref$.hm, ref1$.hc = ref$.hc, ref1$);
521542
this._slider.x = (ref2$ = {
522543
n: 'slide-x',
523544
on: false,
524545
p: 0,
525-
t: ['_mr', '_ml', 'clientX'],
546+
t: ['_mr', '_ml', 'clientX', 'x', 'width'],
526547
dir: 1
527-
}, ref2$.hd = (ref1$ = this._slider).hd, ref2$.hu = ref1$.hu, ref2$.hm = ref1$.hm, ref2$);
548+
}, ref2$.hd = (ref1$ = this._slider).hd, ref2$.hu = ref1$.hu, ref2$.hm = ref1$.hm, ref2$.hc = ref1$.hc, ref2$);
528549
['x', 'y'].map(function(n){
529-
return this$.dom[this$._slider[n].n].addEventListener('mousedown', function(e){
550+
this$.dom[this$._slider[n].n].addEventListener('mousedown', function(e){
530551
return this$._slider[n].hd(e);
531552
});
553+
return this$.dom[this$._slider[n].n].addEventListener('click', function(e){
554+
return this$._slider[n].hc(e);
555+
});
532556
});
533557
return document.addEventListener('wheel', function(e){
534558
var inscope, spos, ref$, dx, dy, ox, oy;

web/static/assets/lib/@plotdb/sheet/dev/index.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)