From ad177e0ee7310be000fc84f2c6fc155c576e8d43 Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 19 Sep 2017 18:00:04 -0700 Subject: [PATCH] Added handling for when the target element doesn't exist. Attempts to iterate up, then attempts to iterate down until a valid target is found. --- slidernav.js | 31 +++++++++++++++++++++------- slidernav-min.js => slidernav.min.js | 14 ++++++------- 2 files changed, 30 insertions(+), 15 deletions(-) rename slidernav-min.js => slidernav.min.js (99%) mode change 100755 => 100644 diff --git a/slidernav.js b/slidernav.js index 88af167..cdbc42e 100755 --- a/slidernav.js +++ b/slidernav.js @@ -16,14 +16,29 @@ $.fn.sliderNav = function(options) { if(o.debug) $(slider).append('
Scroll Offset: 0
'); $('.slider-nav a', slider).on(opts.event, function(event){ var target = $(this).attr('alt'); - var cOffset = $('.slider-content', slider).offset().top; - var tOffset = $('.slider-content '+target, slider).offset().top; - var height = $('.slider-nav', slider).height(); if(o.height) height = o.height; - var pScroll = (tOffset - cOffset) - height/8; - $('.slider-content li', slider).removeClass('selected'); - $(target).addClass('selected'); - $('.slider-content', slider).stop().animate({scrollTop: '+=' + pScroll + 'px'}); - if(o.debug) $('#debug span', slider).html(tOffset); + var cOffset = $('.slider-content', slider).offset().top; + if (!$('.slider-content ' + target, slider).offset()) { + var index = o.items.indexOf(target.replace("#", "")); + var i = index - 1; + while (i >= 0){ + if ($('.slider-content #' + o.items[i], slider).offset()) { target = "#" + o.items[i]; break; } + i--; + } + if (i == -1) { + i = index + 1; + while (i <= o.items.length - 1) { + if ($('.slider-content #' + o.items[i], slider).offset()) { target = "#" + o.items[i]; break; } + i++; + } + } + } + var tOffset = $('.slider-content ' + target, slider).offset().top; + var height = $('.slider-nav', slider).height(); if (o.height) height = o.height; + var pScroll = (tOffset - cOffset) - height / 8; + $('.slider-content li', slider).removeClass('selected'); + $(target).addClass('selected'); + $('.slider-content', slider).stop().animate({ scrollTop: '+=' + pScroll + 'px' }); + if (o.debug) $('#debug span', slider).html(tOffset); }); if(o.arrows){ $('.slider-nav',slider).css('top','20px'); diff --git a/slidernav-min.js b/slidernav.min.js old mode 100755 new mode 100644 similarity index 99% rename from slidernav-min.js rename to slidernav.min.js index bf6b869..6ce99aa --- a/slidernav-min.js +++ b/slidernav.min.js @@ -1,7 +1,7 @@ -/* - * SliderNav - A Simple Content Slider with a Navigation Bar - * Copyright 2010 Monjurul Dolon, http://mdolon.com/ - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://devgrow.com/slidernav - */ -$.fn.sliderNav=function(e){var t={items:["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"],debug:false,height:null,arrows:true,event:"mouseover"};var n=$.extend(t,e);var r=$.meta?$.extend({},n,$$.data()):n;var i=$(this);$(i).addClass("slider");$(".slider-content li:first",i).addClass("selected");$(i).append('
');for(var s in r.items)$(".slider-nav ul",i).append("
  • "+r.items[s]+"
  • ");var o=$(".slider-nav",i).height();if(r.height)o=r.height;$(".slider-content, .slider-nav",i).css("height",o);if(r.debug)$(i).append('
    Scroll Offset: 0
    ');$(".slider-nav a",i).on(n.event,function(e){var t=$(this).attr("alt");var n=$(".slider-content",i).offset().top;var s=$(".slider-content "+t,i).offset().top;var o=$(".slider-nav",i).height();if(r.height)o=r.height;var u=s-n-o/8;$(".slider-content li",i).removeClass("selected");$(t).addClass("selected");$(".slider-content",i).stop().animate({scrollTop:"+="+u+"px"});if(r.debug)$("#debug span",i).html(s)});if(r.arrows){$(".slider-nav",i).css("top","20px");$(i).prepend('
    ');$(i).append('
    ');$(".slide-down",i).click(function(){$(".slider-content",i).animate({scrollTop:"+="+o+"px"},500)});$(".slide-up",i).click(function(){$(".slider-content",i).animate({scrollTop:"-="+o+"px"},500)})}} +/* + * SliderNav - A Simple Content Slider with a Navigation Bar + * Copyright 2010 Monjurul Dolon, http://mdolon.com/ + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://devgrow.com/slidernav + */ +$.fn.sliderNav=function(e){var t={items:["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"],debug:false,height:null,arrows:true,event:"mouseover"};var n=$.extend(t,e);var r=$.meta?$.extend({},n,$$.data()):n;var i=$(this);$(i).addClass("slider");$(".slider-content li:first",i).addClass("selected");$(i).append('
    ');for(var s in r.items)$(".slider-nav ul",i).append("
  • "+r.items[s]+"
  • ");var o=$(".slider-nav",i).height();if(r.height)o=r.height;$(".slider-content, .slider-nav",i).css("height",o);if(r.debug)$(i).append('
    Scroll Offset: 0
    ');$(".slider-nav a",i).on(n.event,function(e){var t=$(this).attr("alt");var n=$(".slider-content",i).offset().top;var s=$(".slider-content "+t,i).offset().top;var o=$(".slider-nav",i).height();if(r.height)o=r.height;var u=s-n-o/8;$(".slider-content li",i).removeClass("selected");$(t).addClass("selected");$(".slider-content",i).stop().animate({scrollTop:"+="+u+"px"});if(r.debug)$("#debug span",i).html(s)});if(r.arrows){$(".slider-nav",i).css("top","20px");$(i).prepend('
    ');$(i).append('
    ');$(".slide-down",i).click(function(){$(".slider-content",i).animate({scrollTop:"+="+o+"px"},500)});$(".slide-up",i).click(function(){$(".slider-content",i).animate({scrollTop:"-="+o+"px"},500)})}}