Antecedentes del problema
Configuré mi página web para usar identificadores con el prefijo #s-
para diferenciar los enlaces ancla de otros identificadores de página. La window.location.hash
cambia a hash, lo que mueve el marco al contenido en foco, pero también activa el hashchange
de cambio de hash y provoca un bucle.
lo que he probado
Lo tengo funcionando cada vez que el hash ha cambiado, pero la única instancia en la que no funciona es cuando se presionó el mismo enlace (ya que uso esto en la condición para detener el ciclo infinito) . El código para esto era:
$(window).on('hashchange', function(e) { if ($(location).attr('hash') != last_hash) { manageHash() } });
Lo que quiero
Me gustaría estar a punto de encontrar una condición o método que permita a los usuarios seleccionar un enlace para cambiar el hash, pero también permitirles volver a seleccionar el mismo enlace tantas veces como quieran sin causar un bucle.
JS
last_hash = '' function manageHash() { var hash = $(location).attr('hash'); if($('#s-'+hash.substring(1)).length != 0 && '#s-'+hash.substring(1) != '#s-' ) { last_hash = hash window.location.hash = '#s-'+hash.substring(1); } } $(window).on('hashchange', function(e) { if ($(location).attr('hash') != last_hash) { manageHash() } }); $(document).ready(function() { manageHash() })
HTML
<div class="contentSubSectionContainer contentSubSection" id="s-{{ subsection.slug }}"> <h2 class="contentSubSectionFont1Bold">{{ subsection.sub_section_title }}:</h2> <div class="contentSubSectionContentFont1"> {{ subsection.content_rendered|safe }} </div> </div>