|
346 | 346 | return css;
|
347 | 347 | }
|
348 | 348 |
|
349 |
| - function pointerOffTarget(targetPointer, prevPointer, threshold, decay, parallax, targetFn, updateFn) { |
| 349 | + function pointerOffTarget(targetPointer, prevPointer, threshold, decay, parallax, targetFn, updateFn, portElem) { |
350 | 350 | var pointer, x;
|
351 | 351 |
|
352 | 352 | if ((!parallax[0] || Math.abs(targetPointer[0] - prevPointer[0]) < threshold[0]) &&
|
|
369 | 369 | return updateFn(pointer);
|
370 | 370 | }
|
371 | 371 |
|
372 |
| - function pointerOnTarget(targetPointer, prevPointer, threshold, decay, parallax, targetFn, updateFn) { |
| 372 | + function pointerOnTarget(targetPointer, prevPointer, threshold, decay, parallax, targetFn, updateFn, portElem) { |
373 | 373 | // Don't bother updating if the pointer hasn't changed.
|
374 | 374 | if (targetPointer[0] === prevPointer[0] && targetPointer[1] === prevPointer[1]) {
|
375 | 375 | return;
|
376 | 376 | }
|
377 |
| - |
378 |
| - return updateFn(targetPointer); |
| 377 | + |
| 378 | + // Pass the responsibility for updating back to "pointerOffTarget" now that we're off the target again. |
| 379 | + portElem.trigger('parallax.setPointerFn', [pointerOffTarget]); |
379 | 380 | }
|
380 | 381 |
|
381 | 382 | function unport(elem, events, winEvents) {
|
|
422 | 423 |
|
423 | 424 | return this.each(function(i) {
|
424 | 425 | var node = this,
|
425 |
| - elem = jQuery(this), |
426 |
| - opts = args[i + 1] ? jQuery.extend({}, options, args[i + 1]) : options, |
427 |
| - decay = opts.decay, |
428 |
| - size = layerSize(elem, opts.width, opts.height), |
429 |
| - origin = layerOrigin(opts.xorigin, opts.yorigin), |
430 |
| - px = layerPx(opts.xparallax, opts.yparallax), |
431 |
| - parallax = layerParallax(opts.xparallax, opts.yparallax, px), |
432 |
| - offset = layerOffset(parallax, px, origin, size), |
433 |
| - position = layerPosition(px, origin), |
434 |
| - pointer = layerPointer(elem, parallax, px, offset, size), |
435 |
| - pointerFn = pointerOffTarget, |
436 |
| - targetFn = targetInside, |
437 |
| - events = { |
438 |
| - 'mouseenter.parallax': function mouseenter(e) { |
439 |
| - pointerFn = pointerOffTarget; |
440 |
| - targetFn = targetInside; |
441 |
| - timer.add(frame); |
442 |
| - timer.start(); |
443 |
| - }, |
444 |
| - 'mouseleave.parallax': function mouseleave(e) { |
445 |
| - // Make the layer come to rest at it's limit with inertia |
446 |
| - pointerFn = pointerOffTarget; |
447 |
| - // Stop the timer when the the pointer hits target |
448 |
| - targetFn = targetOutside; |
449 |
| - } |
450 |
| - }; |
| 426 | + elem = jQuery(this), |
| 427 | + opts = args[i + 1] ? jQuery.extend({}, options, args[i + 1]) : options, |
| 428 | + decay = opts.decay, |
| 429 | + size = layerSize(elem, opts.width, opts.height), |
| 430 | + origin = layerOrigin(opts.xorigin, opts.yorigin), |
| 431 | + px = layerPx(opts.xparallax, opts.yparallax), |
| 432 | + parallax = layerParallax(opts.xparallax, opts.yparallax, px), |
| 433 | + offset = layerOffset(parallax, px, origin, size), |
| 434 | + position = layerPosition(px, origin), |
| 435 | + pointer = layerPointer(elem, parallax, px, offset, size), |
| 436 | + pointerFn = pointerOffTarget, |
| 437 | + targetFn = targetInside, |
| 438 | + events = { |
| 439 | + 'mouseenter.parallax': function mouseenter(e) { |
| 440 | + pointerFn = pointerOffTarget; |
| 441 | + targetFn = targetInside; |
| 442 | + timer.add(frame); |
| 443 | + timer.start(); |
| 444 | + }, |
| 445 | + |
| 446 | + 'mouseleave.parallax': function mouseleave(e) { |
| 447 | + // Make the layer come to rest at it's limit with inertia |
| 448 | + pointerFn = pointerOffTarget; |
| 449 | + // Stop the timer when the the pointer hits target |
| 450 | + targetFn = targetOutside; |
| 451 | + }, |
| 452 | + |
| 453 | + // TODO: Needed to set this up as an event listener due to scope issues. |
| 454 | + 'parallax.setPointerFn': function setPointerFn(e, newPointerFn) { |
| 455 | + pointerFn = newPointerFn; |
| 456 | + } |
| 457 | + }; |
451 | 458 |
|
452 | 459 | function updateCss(newPointer) {
|
453 | 460 | var css = layerCss(parallax, px, offset, size, position, newPointer);
|
|
456 | 463 | }
|
457 | 464 |
|
458 | 465 | function frame() {
|
459 |
| - pointerFn(port.pointer, pointer, port.threshold, decay, parallax, targetFn, updateCss); |
| 466 | + // TODO: Might make sense to eventually refactor calls to pointerFN to simply pass the port instance. |
| 467 | + // TODO: Also to have the entire initialization to be based on a jQuery set of just the port [port] and |
| 468 | + // TODO: pass the layers as an option instead of the other way around, i.e. [layer, layer, ...] |
| 469 | + pointerFn(port.pointer, pointer, port.threshold, decay, parallax, targetFn, updateCss, elem); |
460 | 470 | }
|
461 | 471 |
|
462 | 472 | function targetInside() {
|
|
0 commit comments