2016-09-07 12 views
7

Próbuję wprowadzić za pomocą "czystego" rozwiązania CSS lub za pomocą Javascript w sposób , aby dodać odsunięcie dla linków kotwicznych Matjaxa na równaniach .Mathjax - Dodaj przesunięcie dla docelowego " eqref" łącza równania, gdy istnieje górne stałe menu

Kiedy przewijam w dół na mojej stronie, pojawia się stałe menu główne, które się pojawi. I obsłużyć ten problem z JavaScript tak:

$(window).bind("load", function() { 

    $('a[href*="#"]').click(function(event) { 
    event.preventDefault(); 
    if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) { 
    var target = $(this.hash); 
    target = target.length ? target : $('[name=' + this.hash.slice(1) +']'); 
    if (target.length) { 
    var hash = this.hash; 
    $('html,body').animate({ scrollTop: target.offset().top - 55 }, 300, function() { 
     href = window.location.href; 
     history.pushState({page:href}, null, href.split('#')[0]+hash); 
    }); 
    return false; 
    } 
    } 
    }); 

    $(window).bind('popstate', function(event) { 
    var state = event.originalEvent.state; 
    var target = window.location.href.split('#'); 
    var href = target[0]; 
    if (state) { 
     $('html,body').animate({ scrollTop: 0 }, 300, function() { 
     history.replaceState({}, null, href); 
     }); 
    }  
    });  

Wszystko działa dobrze, ale teraz chciałbym dodać funkcjonalność, z którym mógłbym mieć dobry offsetu po kliknięciu na linki kotwiczne dla równań MahJax (to się dzieje, gdy Mam odniesienia do mojej strony HTML, które odnoszą się do równań MathJax).

Od this link, próbowałem użyć czystego roztworu CSS dodając w moim stylu CSS:

a[name*="mjx"] { 
display: block; 
position: relative; 
top: -100px; 
visibility: hidden; 
} 

Mam ustawiony a[name*="mjx"] ponieważ pojawia się wzór „mjx”, gdy wskaźnik myszy znajduje się nad mathjax linki kotwiczne (z Firefoksem).

Ale to rozwiązanie nie działa.

Muszę też dodać bezpośrednio do \begin{equation} Environnement instrukcja \cssId{anchor_eq}{my equation} z:

#anchor_eq { 
display: block; 
position: relative; 
top: -100px; 
visibility: hidden; 
} 

ale bez powodzenia.

Jeśli ktoś widział rozwiązanie, to byłoby miło,

góry dzięki.

UPDATE 1:

Próbowałem ustawić co Davide Cervone powiedział.

zauważyć, że związek docelowy kotwicy pokazuje jak (w inspektora):

<div class="MathJax_Display"></div> 

Więc dodałem następujące CSS (po mathjax jest ładowany):

.MathJax_Display { 
display: block; 
content: ""; 
margin-top: -100px; 
height: 100px; 
visibility: hidden; 
} 

Ale tego nie robi po kliknięciu na linki z etykietami (np. \eqref), równania są nadal ukryte w górnym ustalonym menu.

Ciągle szukam rozwiązania.

+0

Zdecydowanie nie chcesz dodawać opcji 'widoczność: ukryta'. W każdym razie wygląda na to, że wszystko działa zgodnie z oczekiwaniami. Zgaduję, że napotkasz na ogólną trudność (niezależnie od problemu z offsetem): linki wskażą etykietę równania (co jest poprawnym zachowaniem, ponieważ może być wiele znaczników).Oznacza to, że przeglądarka przewinie etykietę tylko do widoku - i pozostałe części równań mogą pozostać odcięte. Nie sądzę, żeby to była srebrna kula; możesz dodać stałą wartość dodatkowego przesunięcia, aby wyglądało lepiej, lub zaprojektować coś dla określonej zawartości. –

Odpowiedz

1

Jeśli czekać, aby zmienić swój <a> tagów aż po biegnie mathjax, wtedy kod będzie podnieść linki mathjax jak dobrze i nie będzie musiał obsługiwać je oddzielnie. Jednym ze sposobów jest zastąpienie $(window).bind("load", function() { przez MathJax.Hub.Queue(function() { (pod warunkiem, że pojawi się on po <script>, który ładuje sam MathJax.js).

Powiązane problemy