Skip to content

Commit d474ab9

Browse files
committed
chore(release): v0.0.3
1 parent ddd7511 commit d474ab9

File tree

6 files changed

+134
-61
lines changed

6 files changed

+134
-61
lines changed

CHANGELOG.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,22 @@
1+
<a name="v0.0.3"></a>
2+
### v0.0.3 (2013-08-09)
3+
4+
5+
#### Bug Fixes
6+
7+
* **desktop:** unbind keydown when scroll elm is destroyed ([51500ce9](http://github.com/ajoslin/angular-scrolly/commit/51500ce93087f5e62e84207e465722710afc3d17))
8+
* **scroller:**
9+
* remove scroll event ([c8b170e2](http://github.com/ajoslin/angular-scrolly/commit/c8b170e29728d488ec4a312c19a9e7f60f07245b))
10+
* count container top and bottom offset ([f8b71798](http://github.com/ajoslin/angular-scrolly/commit/f8b71798c7acfddf8dca6912f50245479ecdc358))
11+
* **transformer:** Try both cases of transformProp (firefox, ie10) ([761f7c22](http://github.com/ajoslin/angular-scrolly/commit/761f7c22450c6c56cd96c079ec658ddcfcef3044))
12+
13+
14+
#### Features
15+
16+
* **$scroller:** allow desktop scrolling ([8249eaf2](http://github.com/ajoslin/angular-scrolly/commit/8249eaf25049025a014e9439e8febb0b5e190100))
17+
* **dragger:** add horizontal option ([ddd75112](http://github.com/ajoslin/angular-scrolly/commit/ddd75112c88b3616f9d313d8ff233dcdbb2763f2))
18+
* **scroller:** support mousewheel, keys ([a365debd](http://github.com/ajoslin/angular-scrolly/commit/a365debd03e7fafcc2fe83bc34d0fbdaebbe4074))
19+
120
<a name="v0.0.2"></a>
221
### v0.0.2 (2013-07-30)
322

Gruntfile.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,7 @@ module.exports = function(grunt) {
144144
'grunt changelog',
145145
'git add angular-scrolly.js angular-scrolly.min.js',
146146
'git commit -am "chore(release): v<%= pkg.version %>"',
147-
'git tag v<%= pkg.version %>',
148-
'git push --tags origin master'
147+
'git tag v<%= pkg.version %>'
149148
]
150149
},
151150

angular-scrolly.js

Lines changed: 110 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
/*
2-
* angular-scrolly - v0.0.2 - 2013-07-30
2+
* angular-scrolly - v0.0.3 - 2013-08-09
33
* http://github.com/ajoslin/angular-scrolly
44
* Created by Andy Joslin; Licensed under Public Domain
55
*/
66
angular.module('ajoslin.scrolly', [
7-
'ajoslin.scrolly.dragger',
8-
'ajoslin.scrolly.transformer',
97
'ajoslin.scrolly.scroller',
108
'ajoslin.scrolly.directives'
119
]);angular.module('ajoslin.scrolly.directives', ['ajoslin.scrolly.scroller']).directive('scrollyScroll', [
@@ -22,56 +20,78 @@ angular.module('ajoslin.scrolly', [
2220
}
2321
};
2422
}
25-
]);angular.module('ajoslin.scrolly.desktop', []).factory('$desktopScroller', [
26-
'$document',
27-
function ($document) {
28-
return function $desktopScroller(elm, scroller) {
29-
elm.bind('$destroy', function () {
30-
$document.unbind('mousewheel', onMousewheel);
31-
$document.unbind('keydown', onKey);
32-
});
33-
$document.bind('mousewheel', onMousewheel);
34-
$document.bind('keydown', onKey);
35-
function onMousewheel(e) {
36-
var delta = e.wheelDeltaY / 2;
37-
scroller.calculateHeight();
38-
var newPos = scroller.transformer.pos + delta;
39-
scroller.transformer.setTo(clamp(-scroller.scrollHeight, newPos, 0));
40-
e.preventDefault();
41-
}
42-
var KEYS = {
43-
38: 150,
44-
40: -150,
45-
32: -600
46-
};
47-
function onKey(e) {
48-
var delta = KEYS[e.keyCode || e.which];
49-
if (delta) {
50-
e.preventDefault();
51-
if (scroller.transformer.changing)
52-
return;
23+
]);angular.module('ajoslin.scrolly.desktop', []).provider('$desktopScroller', function () {
24+
var KEYS = {
25+
38: 150,
26+
40: -150,
27+
32: -600
28+
};
29+
this.key = function (keyCode, delta) {
30+
if (arguments.length > 1) {
31+
KEYS[keyCode] = delta;
32+
}
33+
return KEYS[keyCode];
34+
};
35+
var _mouseWheelDistanceMulti = 0.5;
36+
this.mouseWheelDistanceMulti = function (newMulti) {
37+
arguments.length && (_mouseWheelDistanceMulti = newMulti);
38+
return _mouseWheelDistanceMulti;
39+
};
40+
this.$get = [
41+
'$document',
42+
function ($document) {
43+
$desktopScroller.mouseWheelDistanceMulti = _mouseWheelDistanceMulti;
44+
$desktopScroller.easeTimeMulti = 0.66;
45+
function $desktopScroller(elm, scroller) {
46+
var self = {};
47+
elm.bind('$destroy', function () {
48+
$document.unbind('mousewheel', onMousewheel);
49+
$document.unbind('keydown', onKey);
50+
});
51+
$document.bind('mousewheel', onMousewheel);
52+
$document.bind('keydown', onKey);
53+
function onMousewheel(e) {
54+
var delta = e.wheelDeltaY * $desktopScroller.mouseWheelDistanceMulti;
5355
scroller.calculateHeight();
5456
var newPos = scroller.transformer.pos + delta;
55-
newPos = clamp(-scroller.scrollHeight, newPos, 0);
56-
if (newPos !== scroller.transformer.pos) {
57-
var newDelta = newPos - scroller.transformer.pos;
58-
var time = Math.abs(delta / 1.5) * (newDelta / delta);
59-
scroller.transformer.easeTo(newPos, time);
57+
scroller.transformer.setTo(clamp(-scroller.scrollHeight, newPos, 0));
58+
e.preventDefault();
59+
}
60+
var INPUT_REGEX = /INPUT|TEXTAREA|SELECT/i;
61+
function onKey(e) {
62+
if (document.activeElement && document.activeElement.tagName && document.activeElement.tagName.match(INPUT_REGEX)) {
63+
return;
64+
}
65+
var delta = KEYS[e.keyCode || e.which];
66+
if (delta) {
67+
e.preventDefault();
68+
if (scroller.transformer.changing)
69+
return;
70+
scroller.calculateHeight();
71+
var newPos = scroller.transformer.pos + delta;
72+
newPos = clamp(-scroller.scrollHeight, newPos, 0);
73+
if (newPos !== scroller.transformer.pos) {
74+
var newDelta = newPos - scroller.transformer.pos;
75+
var time = Math.abs(newDelta * $desktopScroller.easeTimeMulti);
76+
scroller.transformer.easeTo(newPos, time);
77+
}
6078
}
6179
}
80+
return self;
6281
}
63-
};
64-
function clamp(a, b, c) {
65-
return Math.min(Math.max(a, b), c);
82+
function clamp(a, b, c) {
83+
return Math.min(Math.max(a, b), c);
84+
}
85+
return $desktopScroller;
6686
}
67-
}
68-
]);angular.module('ajoslin.scrolly.dragger', []).provider('$dragger', function () {
87+
];
88+
});angular.module('ajoslin.scrolly.dragger', []).provider('$dragger', function () {
6989
var _shouldBlurOnDrag = true;
7090
this.shouldBlurOnDrag = function (shouldBlur) {
7191
arguments.length && (_shouldBlurOnDrag = !!shouldBlur);
7292
return _shouldBlurOnDrag;
7393
};
74-
var _minDistanceForDrag = 6;
94+
var _minDistanceForDrag = 8;
7595
this.minDistanceForDrag = function (newMinDistanceForDrag) {
7696
arguments.length && (_minDistanceForDrag = newMinDistanceForDrag);
7797
return _minDistanceForDrag;
@@ -94,9 +114,24 @@ angular.module('ajoslin.scrolly', [
94114
'$window',
95115
'$document',
96116
function ($window, $document) {
97-
function $dragger(elm) {
117+
function getX(point) {
118+
return point.pageX;
119+
}
120+
function getY(point) {
121+
return point.pageY;
122+
}
123+
function $dragger(elm, options) {
98124
var self = {};
99125
var raw = elm[0];
126+
var getPos, getOtherPos;
127+
options = options || {};
128+
if (options.horizontal) {
129+
getPos = getX;
130+
getOtherPos = getY;
131+
} else {
132+
getPos = getY;
133+
getOtherPos = getX;
134+
}
100135
var state = {
101136
startPos: 0,
102137
startTime: 0,
@@ -116,19 +151,20 @@ angular.module('ajoslin.scrolly', [
116151
elm.bind('touchstart', dragStart);
117152
elm.bind('touchmove', dragMove);
118153
elm.bind('touchend touchcancel', dragEnd);
119-
function restartDragState(y) {
120-
state.startPos = state.pos = y;
154+
function restartDragState(point) {
155+
state.startPos = state.pos = getPos(point);
156+
state.otherStartPos = state.otherPos = getOtherPos(point);
121157
state.startTime = Date.now();
122158
state.dragging = true;
123159
}
124160
function isInput(raw) {
125-
return raw && raw.tagName === 'INPUT' || raw.tagName === 'SELECT' || raw.tagName === 'TEXTAREA';
161+
return raw && (raw.tagName === 'INPUT' || raw.tagName === 'SELECT' || raw.tagName === 'TEXTAREA');
126162
}
127163
function dragStart(e) {
128164
e = e.originalEvent || e;
129165
var target = e.target || e.srcElement;
130166
var point = e.touches ? e.touches[0] : e;
131-
if (parentWithAttr(target, 'data-dragger-ignore')) {
167+
if (parentWithAttr(target, 'dragger-ignore')) {
132168
return;
133169
}
134170
if (_shouldBlurOnDrag && isInput(target)) {
@@ -139,7 +175,7 @@ angular.module('ajoslin.scrolly', [
139175
state.delta = 0;
140176
state.pos = 0;
141177
state.distance = 0;
142-
restartDragState(point.pageY);
178+
restartDragState(point);
143179
dispatchEvent({
144180
type: 'start',
145181
startPos: state.startPos,
@@ -151,17 +187,24 @@ angular.module('ajoslin.scrolly', [
151187
e.preventDefault();
152188
if (state.dragging) {
153189
var point = e.touches ? e.touches[0] : e;
154-
var delta = point.pageY - state.pos;
190+
var delta = getPos(point) - state.pos;
155191
state.delta = delta;
156-
state.pos = point.pageY;
192+
state.pos = getPos(point);
193+
state.otherPos = getOtherPos(point);
157194
state.distance = state.pos - state.startPos;
158-
if (Math.abs(state.pos - state.startPos) < _minDistanceForDrag) {
159-
return;
195+
state.otherDistance = state.otherPos - state.otherStartPos;
196+
if (!state.moved) {
197+
if (Math.abs(state.otherDistance) > _minDistanceForDrag) {
198+
return dragEnd(e);
199+
} else if (Math.abs(state.distance) > _minDistanceForDrag) {
200+
state.moved = true;
201+
} else {
202+
return;
203+
}
160204
}
161-
state.moved = true;
162205
var timeSinceMove = state.lastMoveTime - state.startTime;
163206
if (timeSinceMove > _maxTimeMotionless) {
164-
restartDragState(state.pos);
207+
restartDragState(point);
165208
}
166209
state.lastMoveTime = e.timeStamp || Date.now();
167210
dispatchEvent({
@@ -276,6 +319,12 @@ angular.module('ajoslin.scrolly', [
276319
}
277320
function $scroller(elm) {
278321
var self = {};
322+
var currentScroller = elm.data('$scrolly.scroller');
323+
if (currentScroller) {
324+
return currentScroller;
325+
} else {
326+
elm.data('$scrolly.scroller', self);
327+
}
279328
var raw = elm[0];
280329
var transformer = self.transformer = new $transformer(elm);
281330
var dragger = self.dragger = new $dragger(elm);
@@ -407,11 +456,17 @@ angular.module('ajoslin.scrolly', [
407456
}
408457
function $transformer(elm, options) {
409458
var self = {};
459+
var currentTransformer = elm.data('$scrolly.transformer');
460+
if (currentTransformer) {
461+
return currentTransformer;
462+
} else {
463+
elm.data('$scrolly.transformer', self);
464+
}
410465
var raw = elm[0];
411466
var _transformGetter;
412467
var _matrixIndex;
413468
options = options || {};
414-
if (options.translateX) {
469+
if (options.horizontal) {
415470
_transformGetter = transformGetterX;
416471
_matrixIndex = 4;
417472
} else {

0 commit comments

Comments
 (0)