2013-12-08 15 views
5

Używam elementu wraz z :target selektorem css, aby pokazać <div>, który domyślnie jest ustawiony na display:none. Problem polega na tym, że po kliknięciu linku pokazującego, że <div>, automatycznie przewijam stronę w dół do tego <div>.Nie zezwalaj na przesuwanie ekranu po kliknięciu na <a href=></a>

Czy istnieje sposób na zatrzymanie ruchu ekranu?

Niestety, nie mam jeszcze wprawy w niczym oprócz CSS i HTML.

+0

Myślę, że będziesz potrzebował JS, ponieważ masz dwie możliwości: 1. Unikaj przewijania przez JS 2. użyj innego elementu niż kotwicy, ale wtedy nie będziesz miał funkcji: cel i będziesz musiał pokazać swój cel element przez js –

+0

Jak powiedział iv, nie wiem jeszcze js (ledwo zacząłem go uczyć tydzień temu).Podejrzewam, że istnieje dość łatwy sposób na zrobienie tego, co im robisz, z nagimi CSS i HTML, więc chociaż jestem im wdzięczny za wszystkie pomysły JS (chory zachowaj je na później), najlepszym rozwiązaniem byłoby takie, które jest ograniczone css i html (Jeśli nawet tam jest). – Czulu

Odpowiedz

0

Jest to bit hack, ale można użyć podstawowych prac css wokół:

CSS only Example

#div1 { 
    height: 0; 
    overflow:hidden; 
} 
#div1:target { 
    height: auto; 
    margin-top: -110px; 
    padding-top: 110px; 
} 
#div2 { 
    background:red; 
} 

<a href="#div1">Click to show</a> 

<div id="div1"> 
    <div id="div2">Content</div> 
</div> 

jeśli jest to potrzebne, aby być nieco bardziej elastyczne można dodaj js ...

More Flexible Example with JS

$('a').click(function() { 
    $('#div1').css({ 
     'margin-top': 0 - $('#div1').position().top + $(window).scrollTop(), 
      'padding-top': $('#div1').position().top - $(window).scrollTop() 
    }); 
}); 

Zasadniczo jesteś pociągnięcie szczyt div1 z marży ujemnej, a następnie z powrotem w dół popychając Div2 z wyściółką, tak że górna div1 spoczywa na górnej części okna ... Tak jak mówiłem jest hackem, ale działa.

4

w linku wpisać:

<a href="javascript:void();">Link here</a> 
+1

Pytanie mówi, że chodzi o to, aby wywołać zmianę ': target'. Nie możesz zmienić miejsca, w którym 'href' wskazuje, nie łamiąc tego. – Quentin

-1

Te linki są linki kotwicy i domyślnie dla tych skoków :) Można użyć JS, aby zapobiec domyślne zachowanie w jakiś sposób. Na przykład przy użyciu jQuery:

$('a').click(function(e){e.preventDefault();}); 

lub domyślnie dodawać return false; do linków

+1

To zatrzymałoby link do śledzenia. Jeśli link nie zostanie zastosowany, identyfikator fragmentu w adresie URL nie ulegnie zmianie, co może spowodować uszkodzenie obiektu. – Quentin

+0

nadal możesz to zrobić przez js, jeśli jej potrzebujesz. Ale jeśli nie chce skoku, to w ogóle nie korzystam z linków :) –

+0

@Quentin: czy masz własne rozwiązanie, jeśli nie podoba ci się te? –

7

Można użyć event.preventDefault(), aby tego uniknąć. Coś takiego:

$('a.yourclass').click(function(e) 
{ 
    //your code 
    e.preventDefault(); 
}); 

OR:

<a href="javascript:void(0)" onclick="somefunction(); return false;">link</a> 
+1

To zatrzymałoby link do śledzenia. Jeśli link nie zostanie zastosowany, identyfikator fragmentu w adresie URL nie ulegnie zmianie, co może spowodować uszkodzenie obiektu. – Quentin

+0

@Quentin: - A co powiesz na to: anchor

+1

A co zrobi 'somefunction()? Ustaw "location.hash"? To przenosi nas z powrotem do miejsca, w którym zaczęliśmy, ale z dużo brzydszym kodem i zależnością od JavaScript. – Quentin

0

Musisz JS i tak:

// (in jQuery) 
$el.on('click', function(e) { 
    // find current scroll position 
    var pos = document.body.scrollTop || document.documentElement.scrollTop; 

    // let normal action propagate etc 

    // in the next available frame (async, hence setTimeout), reset scroll posiion 
    setTimeout(function() { 
    window.scrollTo(0, pos); 
    }, 1); 
}) 

Nie wiem, czy to będzie migotać ekran. Może. To okropne włamanie w obie strony.

W moim Chrome, nie ma migotania: http://jsfiddle.net/rudiedirkx/LEwNd/1/show/

+0

Jeśli stworzysz takie rozwiązanie, również zapisałbym pozycję x. Na wszelki wypadek, gdyby tam był :) –

0

Unikaj używania: cel wszystkich razem i po prostu użyć onclick wydarzenie.

function myFunction() 
{ 
    document.getElementById('hiddenDiv').style.display = 'block'; 
    return false; 
} 

<a href="#" onclick="myFunction()"></a> 
Powiązane problemy