SickGear/gui/slick/js/lib/jquery.bookmarkscroll.js

53 lines
3.1 KiB
JavaScript
Raw Normal View History

//** Scrolling HTML Bookmarks script- (c) Dynamic Drive DHTML code library: http://www.dynamicdrive.com.
//** Available/ usage terms at http://www.dynamicdrive.com/ (April 11th, 09')
//** Updated Nov 10th, 09'- Fixed anchor jumping issue in IE7
var bookmarkscroll = {
setting: {duration: 1000, yoffset: -50}, //{duration_of_scroll_milliseconds, offset_from_target_element_to_rest}
topkeyword: '#top', //keyword used in your anchors and scrollTo() to cause script to scroll page to very top
scrollTo: function (dest, options, hash) {
var $ = jQuery, options = options || {};
var $dest = (typeof dest == "string" && dest.length > 0) ? (dest == this.topkeyword ? 0 : $('#' + dest)) : (dest) ? $(dest) : []; //get element based on id, topkeyword, or dom ref
if ($dest === 0 || $dest.length == 1 && (!options.autorun || options.autorun && Math.abs($dest.offset().top + (options.yoffset || this.setting.yoffset) - $(window).scrollTop()) > 5)) {
this.$body.animate({scrollTop: ($dest === 0) ? 0 : $dest.offset().top + (options.yoffset || this.setting.yoffset)}, (options.duration || this.setting.duration), function () {
//** if ($dest!==0 && hash)
//** location.hash=hash
})
}
},
urlparamselect: function () {
var param = window.location.search.match(/scrollto=[\w\-_,]+/i); //search for scrollto=divid
return (param) ? param[0].split('=')[1] : null
},
init: function () {
jQuery(document).ready(function ($) {
var mainobj = bookmarkscroll;
mainobj.$body = (window.opera) ? (document.compatMode == "CSS1Compat" ? $('html') : $('body')) : $('html,body');
var urlselectid = mainobj.urlparamselect(); //get div of page.htm?scrollto=divid
if (urlselectid) //if id defined
setTimeout(function () {
mainobj.scrollTo(document.getElementById(urlselectid) || $('a[name=' + urlselectid + ']:eq(0)').get(0), {autorun: true})
}, 100);
$('a[href^="#"]').each(function () { //loop through links with "#" prefix
var hashvalue = this.getAttribute('href').match(/#\w+$/i); //filter links at least 1 character following "#" prefix
hashvalue = (hashvalue) ? hashvalue[0].substring(1) : null; //strip "#" from hashvalue
if (this.hash.length > 1) { //if hash value is more than just "#"
var $bookmark = $('a[name=' + this.hash.substr(1) + ']:eq(0)');
if ($bookmark.length == 1 || this.hash == mainobj.topkeyword) { //if HTML anchor with given ID exists or href==topkeyword
if ($bookmark.length == 1 && !document.all) //non IE, or IE7+
$bookmark.html('.').css({position: 'absolute', fontSize: 1, visibility: 'hidden'});
$(this).click(function (e) {
mainobj.scrollTo((this.hash == mainobj.topkeyword) ? mainobj.topkeyword : $bookmark.get(0), {}, this.hash);
e.preventDefault()
})
}
}
})
})
}
};
bookmarkscroll.init();