123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- /*
- * jQuery.JSPclickNScroll v1.0
- *
- * Copyright (c) 2010 Joshua Faulkenberry
- * Dual licensed under the MIT and GPL licenses.
- * Joshua Faulkenberry
- *
- * $Date: 2010-10-25 18:55:27 -0700 (Mon, 25 Oct 2010) $
- * $Revision: 5 $
- */
- (function($){
-
- jQuery.extend({
- mouse: {
- x: 0,
- y: 0
- },
- JSPclickNScroll: {
- mousedown:false,
- emaX: 0,
- emaY: 0
- }
- });
-
- jQuery.fn.extend({
- JSPclickNScroll: function(options) {
- var ops = $.extend({
- allowHiliting:false,
- acceleration:.65,
- deceleration:.85,
- decelRate:64,
- reverse:false,
- rightMouse:false,
- allowThrowing:true,
- throwOnOut:true
- }, options || {});
- return this.each(function(){
- var $this = $(this).data("options", ops);
- if(!ops.allowHiliting) {
- if (jQuery.browser.msie) {
- $this.get(0).onselectstart = function () { return false; };
- }
- else {
- $this.get(0).onmousedown = function(e){e.preventDefault()}
- }
- }
- $this.mousedown(function(e) {
- $.JSPclickNScroll.mousedown = $this;
- }).mouseup(function(e) {
- if(ops.allowThrowing) sling($(this));
- $.JSPclickNScroll.mousedown = false;
- }).mouseout(function(e) {
- var from = e.relatedTarget || e.toElement;
- if (!from || from.nodeName == "HTML") {
- if($.JSPclickNScroll.mousedown && ops.allowThrowing && ops.throwOnOut) sling($(this));
- $.JSPclickNScroll.mousedown = false;
- }
- })
- });
- }
- });
-
- function sling($this) {
- var ops = $this.data("options"),
- changeX = ($.JSPclickNScroll.emaX)*ops.deceleration,
- changeY = ($.JSPclickNScroll.emaY)*ops.deceleration;
- if((changeX < .01 && changeX > -.01) || (changeY < .01 && changeY > -.01)) {return;}
- move($this, changeX, changeY);
- setTimeout(function() {
- sling($this);
- }, 1000/ops.decelRate);
- }
-
- function move($this, changeX, changeY) {
- if(($.JSPclickNScroll.emaX < 0 && changeX > 0) || ($.JSPclickNScroll.emaX > 0 && changeX < 0)) $.JSPclickNScroll.emaX = 0;
- if(($.JSPclickNScroll.emaY < 0 && changeY > 0) || ($.JSPclickNScroll.emaY > 0 && changeY < 0)) $.JSPclickNScroll.emaY = 0;
- var ops = $this.data("options"),
- amntX = ops.acceleration * changeX + (1 - ops.acceleration) * $.JSPclickNScroll.emaX,
- amntY = ops.acceleration * changeY + (1 - ops.acceleration) * $.JSPclickNScroll.emaY,
- scrollRight = $this[0].scrollWidth ? $this[0].scrollWidth - $this[0].clientWidth : $this[0].body.scrollWidth - $this[0].body.clientWidth,
- scrollBottom = $this[0].scrollHeight ? $this[0].scrollHeight - $this[0].clientHeight : $this[0].body.scrollHeight - $this[0].body.clientHeight,
- api = $this.data('jsp');
- if(($this.scrollLeft() <= 0 && changeX <= 0) || ($this.scrollLeft() >= scrollRight && changeX >= 0)) {}
- // else $this.scrollLeft($this.scrollLeft() + (amntX));
- api.scrollBy(amntX, 0);
- if(($this.scrollTop() <= 0 && changeY <= 0) || ($this.scrollTop() >= scrollBottom && changeY >= 0)) {}
- // else $this.scrollTop($this.scrollTop() + (amntY));
- api.scrollBy(0, amntY);
- $.JSPclickNScroll.emaX = amntX;
- $.JSPclickNScroll.emaY = amntY;
- }
-
- $(document).mousemove(function(e) {
- if($.JSPclickNScroll.mousedown) {
- var $this = $.JSPclickNScroll.mousedown,
- ops = $this.data("options");
- if(ops.rightMouse && e.button != 2) return;
- else if(!ops.rightMouse && e.button == 2) return;
- var changeX = e.pageX - $.mouse.x,
- changeY = e.pageY - $.mouse.y;
- if(!ops.reverse) {
- changeX = 0-changeX;
- changeY = 0-changeY;
- }
- move($this, changeX, changeY);
- }
- $.mouse = {
- x: e.pageX,
- y: e.pageY
- };
- });
-
- })(jQuery);
|