javascript - Auto scroll (horizontally) is not happening to show the active anchor link when too many links are present -


i have many anchor links in navigation , different sections corresponding it. on scrolling top bottom or bottom top intended link sets active. working fine. if active link not present in visible menu (hides off limits) menu link not visible. have attached screenshot of menu , code i'm using. please suggest.

image screenshot here

thanks lot in advance

var scrolltop = $(window).scrolltop();  $(document).ready(function() { if($('.pn-productnav_wrapper').length >0 ){  var stickynavtop = $('.pn-productnav_wrapper').offset().top;  var stickynav = function(){ var scrolltop = $(window).scrolltop();  if (scrolltop > stickynavtop) {       $('#sticky').addclass('sticky1');          $('.mainsectionpad').addclass('sectiontop');   } else {     $('#sticky').removeclass('sticky1');       $('.mainsectionpad').removeclass('sectiontop');  }  };  stickynav();      $(window).on('scroll', function() {      stickynav();      pagescrollingup();    });     }   });      function pagescrollingup(){ if( /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(navigator.useragent) ) {        $('a.page-scroll').bind('click', function(event) {         var $anchor = $(this);         $('html, body').stop().animate({             scrolltop: $($anchor.attr('href')).offset().top-150         }, 1500);         event.preventdefault();     }); } else{     $('a.page-scroll').bind('click', function(event) {         var $anchor = $(this);         $('html, body').stop().animate({             scrolltop: $($anchor.attr('href')).offset().top-90         }, 1500);         event.preventdefault();     });  }  }   var settings = {     navbartravelling: false,     navbartraveldirection: "",      navbartraveldistance: 150 }  document.documentelement.classlist.remove("no-js"); document.documentelement.classlist.add("js");  // out advancer buttons var pnadvancerleft = document.getelementbyid("pnadvancerleft"); var pnadvancerright = document.getelementbyid("pnadvancerright");  var pnproductnav = document.getelementbyid("pnproductnav"); var pnproductnavcontents = document.getelementbyid("pnproductnavcontents");      if($('#pnproductnav').length >0 ) {  pnproductnav.setattribute("data-overflowing", determineoverflow(pnproductnavcontents, pnproductnav));  // handle scroll of horizontal container var last_known_scroll_position = 0; var ticking = false;  function dosomething(scroll_pos) {     pnproductnav.setattribute("data-overflowing", determineoverflow(pnproductnavcontents, pnproductnav)); }  pnproductnav.addeventlistener("scroll", function() {     last_known_scroll_position = window.scrolly;     if (!ticking) {         window.requestanimationframe(function() {             dosomething(last_known_scroll_position);             ticking = false;         });     }     ticking = true; });   pnadvancerleft.addeventlistener("click", function() {     // if in middle of move return     if (settings.navbartravelling === true) {         return;     }     // if have content overflowing both sides or on left     if (determineoverflow(pnproductnavcontents, pnproductnav) === "left" || determineoverflow(pnproductnavcontents, pnproductnav) === "both") {         // find how far panel has been scrolled         var availablescrollleft = pnproductnav.scrollleft;          // if space available less 2 lots of our desired distance, move whole amount         // otherwise, move amount in settings         if (availablescrollleft < settings.navbartraveldistance * 2) {             pnproductnavcontents.style.transform = "translatex(" + availablescrollleft + "px)";         } else {             pnproductnavcontents.style.transform = "translatex(" + settings.navbartraveldistance + "px)";         }         // want transition (this set in css) when moving remove class prevent         pnproductnavcontents.classlist.remove("pn-productnav_contents-no-transition");         // update our settings         settings.navbartraveldirection = "left";         settings.navbartravelling = true;     }     // update attribute in dom     pnproductnav.setattribute("data-overflowing", determineoverflow(pnproductnavcontents, pnproductnav)); });  pnadvancerright.addeventlistener("click", function() {     // if in middle of move return     if (settings.navbartravelling === true) {         return;     }     // if have content overflowing both sides or on right     if (determineoverflow(pnproductnavcontents, pnproductnav) === "right" || determineoverflow(pnproductnavcontents, pnproductnav) === "both") {         // right edge of container , content         var navbarrightedge = pnproductnavcontents.getboundingclientrect().right;         var navbarscrollerrightedge = pnproductnav.getboundingclientrect().right;         // know how space have available scroll         var availablescrollright = math.floor(navbarrightedge - navbarscrollerrightedge);         // if space available less 2 lots of our desired distance, move whole amount         // otherwise, move amount in settings         if (availablescrollright < settings.navbartraveldistance * 2) {             pnproductnavcontents.style.transform = "translatex(-" + availablescrollright + "px)";         } else {             pnproductnavcontents.style.transform = "translatex(-" + settings.navbartraveldistance + "px)";         }         // want transition (this set in css) when moving remove class prevent         pnproductnavcontents.classlist.remove("pn-productnav_contents-no-transition");         // update our settings         settings.navbartraveldirection = "right";         settings.navbartravelling = true;     }     // update attribute in dom     pnproductnav.setattribute("data-overflowing", determineoverflow(pnproductnavcontents, pnproductnav)); });  pnproductnavcontents.addeventlistener(     "transitionend",     function() {         // value of transform, apply current scroll position (so scroll pos first) , remove transform         var styleoftransform = window.getcomputedstyle(pnproductnavcontents, null);         var tr = styleoftransform.getpropertyvalue("-webkit-transform") || styleoftransform.getpropertyvalue("transform");         // if there no transition want default 0 , not null         var amount = math.abs(parseint(tr.split(",")[4]) || 0);         pnproductnavcontents.style.transform = "none";         pnproductnavcontents.classlist.add("pn-productnav_contents-no-transition");         // lets set scroll position         if (settings.navbartraveldirection === "left") {             pnproductnav.scrollleft = pnproductnav.scrollleft - amount;         } else {             pnproductnav.scrollleft = pnproductnav.scrollleft + amount;         }         settings.navbartravelling = false;     },     false );  // handle setting active link pnproductnavcontents.addeventlistener("click", function(e) {     var links = [].slice.call(document.queryselectorall(".pn-productnav_link"));     links.foreach(function(item) {         item.setattribute("aria-selected", "false");     })     e.target.setattribute("aria-selected", "true"); })  function determineoverflow(content, container) {     var containermetrics = container.getboundingclientrect();     var containermetricsright = math.floor(containermetrics.right);     var containermetricsleft = math.floor(containermetrics.left);     var contentmetrics = content.getboundingclientrect();     var contentmetricsright = math.floor(contentmetrics.right);     var contentmetricsleft = math.floor(contentmetrics.left);      if (containermetricsleft > contentmetricsleft && containermetricsright < contentmetricsright) {         return "both";     } else if (contentmetricsleft < containermetricsleft) {         return "left";     } else if (contentmetricsright > containermetricsright) {         return "right";     } else {         return "none";     } } }[enter image description here][1]     [1]: https://i.stack.imgur.com/bn0yi.png 


Comments

Popular posts from this blog

Sort a complex associative array in PHP -

vb.net - How to ignore if a cell is empty nothing -

recursion - Can every recursive algorithm be improved with dynamic programming? -