reduced the risk of memory leaks
This commit is contained in:
parent
b461fa895b
commit
74f97e330e
@ -14,7 +14,9 @@
|
|||||||
|
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
// Use the default settings
|
// Use the default settings
|
||||||
var settings = $.extend(true, {}, defaultSettings);
|
var settings = $.extend(true, {}, defaultSettings),
|
||||||
|
$this = $(this);
|
||||||
|
|
||||||
if (typeof suppliedSettings === "object") {
|
if (typeof suppliedSettings === "object") {
|
||||||
// But over-ride any supplied
|
// But over-ride any supplied
|
||||||
$.extend(true, settings, suppliedSettings);
|
$.extend(true, settings, suppliedSettings);
|
||||||
@ -23,26 +25,33 @@
|
|||||||
option = suppliedSettings;
|
option = suppliedSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Catch options
|
||||||
|
|
||||||
if (option === 'update') {
|
if (option === 'update') {
|
||||||
if ($(this).data('perfect-scrollbar-update')) {
|
if ($this.data('perfect-scrollbar-update')) {
|
||||||
$(this).data('perfect-scrollbar-update')();
|
$this.data('perfect-scrollbar-update')();
|
||||||
}
|
}
|
||||||
return $(this);
|
return $this;
|
||||||
}
|
}
|
||||||
else if (option === 'destroy') {
|
else if (option === 'destroy') {
|
||||||
if ($(this).data('perfect-scrollbar-destroy')) {
|
if ($this.data('perfect-scrollbar-destroy')) {
|
||||||
$(this).data('perfect-scrollbar-destroy')();
|
$this.data('perfect-scrollbar-destroy')();
|
||||||
}
|
}
|
||||||
return $(this);
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($(this).data('perfect-scrollbar')) {
|
if ($this.data('perfect-scrollbar')) {
|
||||||
// if there's already perfect-scrollbar
|
// if there's already perfect-scrollbar
|
||||||
return $(this).data('perfect-scrollbar');
|
return $this.data('perfect-scrollbar');
|
||||||
}
|
}
|
||||||
|
|
||||||
var $this = $(this).addClass('ps-container'),
|
|
||||||
$scrollbarX = $("<div class='ps-scrollbar-x'></div>").appendTo($this),
|
// Or generate new perfectScrollbar
|
||||||
|
|
||||||
|
// Set class to the container
|
||||||
|
$this.addClass('ps-container');
|
||||||
|
|
||||||
|
var $scrollbarX = $("<div class='ps-scrollbar-x'></div>").appendTo($this),
|
||||||
$scrollbarY = $("<div class='ps-scrollbar-y'></div>").appendTo($this),
|
$scrollbarY = $("<div class='ps-scrollbar-y'></div>").appendTo($this),
|
||||||
containerWidth,
|
containerWidth,
|
||||||
containerHeight,
|
containerHeight,
|
||||||
@ -84,6 +93,7 @@
|
|||||||
containerHeight = $this.height();
|
containerHeight = $this.height();
|
||||||
contentWidth = $this.prop('scrollWidth');
|
contentWidth = $this.prop('scrollWidth');
|
||||||
contentHeight = $this.prop('scrollHeight');
|
contentHeight = $this.prop('scrollHeight');
|
||||||
|
|
||||||
if (containerWidth < contentWidth) {
|
if (containerWidth < contentWidth) {
|
||||||
scrollbarXWidth = getSettingsAdjustedThumbSize(parseInt(containerWidth * containerWidth / contentWidth, 10));
|
scrollbarXWidth = getSettingsAdjustedThumbSize(parseInt(containerWidth * containerWidth / contentWidth, 10));
|
||||||
scrollbarXLeft = parseInt($this.scrollLeft() * (containerWidth - scrollbarXWidth) / (contentWidth - containerWidth), 10);
|
scrollbarXLeft = parseInt($this.scrollLeft() * (containerWidth - scrollbarXWidth) / (contentWidth - containerWidth), 10);
|
||||||
@ -93,6 +103,7 @@
|
|||||||
scrollbarXLeft = 0;
|
scrollbarXLeft = 0;
|
||||||
$this.scrollLeft(0);
|
$this.scrollLeft(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (containerHeight < contentHeight) {
|
if (containerHeight < contentHeight) {
|
||||||
scrollbarYHeight = getSettingsAdjustedThumbSize(parseInt(containerHeight * containerHeight / contentHeight, 10));
|
scrollbarYHeight = getSettingsAdjustedThumbSize(parseInt(containerHeight * containerHeight / contentHeight, 10));
|
||||||
scrollbarYTop = parseInt($this.scrollTop() * (containerHeight - scrollbarYHeight) / (contentHeight - containerHeight), 10);
|
scrollbarYTop = parseInt($this.scrollTop() * (containerHeight - scrollbarYHeight) / (contentHeight - containerHeight), 10);
|
||||||
@ -171,6 +182,9 @@
|
|||||||
$scrollbarX.removeClass('in-scrolling');
|
$scrollbarX.removeClass('in-scrolling');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
currentLeft =
|
||||||
|
currentPageX = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
var bindMouseScrollYHandler = function () {
|
var bindMouseScrollYHandler = function () {
|
||||||
@ -199,6 +213,9 @@
|
|||||||
$scrollbarY.removeClass('in-scrolling');
|
$scrollbarY.removeClass('in-scrolling');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
currentTop =
|
||||||
|
currentPageY = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
// bind handlers
|
// bind handlers
|
||||||
@ -299,6 +316,7 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
$this.bind("touchend.perfect-scroll", function (e) {
|
$this.bind("touchend.perfect-scroll", function (e) {
|
||||||
|
clearInterval(breakingProcess);
|
||||||
breakingProcess = setInterval(function () {
|
breakingProcess = setInterval(function () {
|
||||||
if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {
|
if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {
|
||||||
clearInterval(breakingProcess);
|
clearInterval(breakingProcess);
|
||||||
@ -314,13 +332,27 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
var destroy = function () {
|
var destroy = function () {
|
||||||
$scrollbarX.remove();
|
|
||||||
$scrollbarY.remove();
|
|
||||||
$this.unbind('.perfect-scroll');
|
$this.unbind('.perfect-scroll');
|
||||||
$(window).unbind('.perfect-scroll');
|
$(window).unbind('.perfect-scroll');
|
||||||
$this.data('perfect-scrollbar', null);
|
$this.data('perfect-scrollbar', null);
|
||||||
$this.data('perfect-scrollbar-update', null);
|
$this.data('perfect-scrollbar-update', null);
|
||||||
$this.data('perfect-scrollbar-destroy', null);
|
$this.data('perfect-scrollbar-destroy', null);
|
||||||
|
$scrollbarX.remove();
|
||||||
|
$scrollbarY.remove();
|
||||||
|
|
||||||
|
// clean all variables
|
||||||
|
$scrollbarX =
|
||||||
|
$scrollbarY =
|
||||||
|
containerWidth =
|
||||||
|
containerHeight =
|
||||||
|
contentWidth =
|
||||||
|
contentHeight =
|
||||||
|
scrollbarXWidth =
|
||||||
|
scrollbarXLeft =
|
||||||
|
scrollbarXBottom =
|
||||||
|
scrollbarYHeight =
|
||||||
|
scrollbarYTop =
|
||||||
|
scrollbarYRight = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
var ieSupport = function (version) {
|
var ieSupport = function (version) {
|
||||||
|
Loading…
Reference in New Issue
Block a user