2011-07-29 11 views
9

Chcę zaimplementować funkcje takie jak wstecz i do przodu w moim projekcie tak samo jak przeglądarka, tak jak strona internetowa, którą mamy na ekranie. co próbowałem to intially m ustawienie currentscreenindex=-1jak zaimplementować funkcje wstecz i do przodu, takie jak przeglądarka

i gdy dane z pierwszego ekranu pochodzi wykonać tę funkcję

In screen data arrive function(){ 
    this.currentscreenindex++; 
    this.screenvisited[this.currentscreenindex]=data; 

} 

Oto moja funkcja to co próbowałem:

back(){ 
    currentscreenindex--; 
    var screen=screenvisited[currentscreenindex]; 
    // will go to this screen 
} 

ale co mój problem dotyczy:

    currentscreenindex screen data in screenvisted array 
When 1st screen arrived  0  Data of 1st screen 
When 2st screen arrived  1  Data of 2st screen 
When 3st screen arrived  2  Data of 3st screen 
When 4st screen arrived  3  Data of 4st screen 
When 5st screen arrived  4  Data of 5st screen 
when user click back button 3  call the screen is set to 4th gib, 

, więc gdy nadejdą dane czwartego ekranu, bieżący indeks będzie się zwiększał o currentindex=4, a dane o bieżącym indeksie 4 będą na czwartym ekranie, myślę, że to nie jest poprawne, ponieważ jeśli dane o currentindex=4 zostaną zmienione, to nie mogę do przodu, jeśli tak, to powiedz, jak mogę to poprawić?

proszę zasugerować, w jaki sposób mogę napisać prawidłową funkcję "Wstecz i Dalej", aby wykonać tę samą funkcjonalność co przeglądarka.

+1

Jeśli jest to javascript app, można użyć skrótu URL i historii HTML5 dodać stany historii przeglądarki, a następnie używać poleceń manipulowania historią JS, aby przejść do przodu i do tyłu? Jeśli nie, możesz wyjaśnić swój cel. – Wylie

Odpowiedz

19

nie wiem jak by zmieścić to w jaki sposób aktualnie robi, ale można osiągnąć funkcjonalność takiego:

Musisz dwa stosy. Stos tylny i następny stos. Oboje zaczynają być pustymi. Gdy użytkownik przejdzie do nowej strony za pośrednictwem łącza lub innej metody nawigacji, oprócz cofania/przekazywania, usuń następny stos, dodaj bieżącą stronę do tylnego stosu i kontynuuj nawigację. Kiedy użytkownik kliknie z powrotem, przesuń bieżącą stronę na stos przedni, pop stronę z tyłu stosu i przejdź do strony popped. Kiedy użytkownik kliknie do przodu, przesuń bieżącą stronę na stos tylny, pop stronę z przedniego stosu i przejdź do wyświetlonej strony.

Edit: Pytałeś jakiegoś Pseudokod, więc proszę bardzo:

var currentPage=null; 
var backStack=[]; 
var forwardStack=[]; 
function navigate(newPage) { 
    currentPage=newPage; 
    // stub 
} 
function linkClicked(page) { 
    backStack.push(currentPage); 
    forwardStack=[]; 
    navigate(page); 
} 
function goBack() { 
    forwardStack.push(currentPage); 
    navigate(backStack.pop()); 
} 
function goForward() { 
    backStack.push(currentPage); 
    navigate(forwardStack.pop()); 
} 
+0

Dobra odpowiedź. Można go rozszerzyć, dodając przycisk włączania/wyłączania. Spróbuj dodać ten kod w funkcji nawigacji. if (backStack.count == 0) backButton.Enabled = false; else backButton.Enabled = true; if (forwardStack.count == 0) forwardButton.Enabled = false; else forwardButton.Enabled = true; –

0

Powinieneś mieć dwie cyfry: lastScreenInHistory, currentScreen.

  1. Inicjuj zarówno do -1.
  2. Na nowym przyjazdu ekran:
    lastScreenInHistory = ++currentScreen; this.screenvisited[this.lastScreenInHistory]=data;

  3. Na odwrocie: if(currentScreen > 0) --currentScreen;

  4. Z przodu: if(currentScreen < lastScreenInHistory) ++currentScreen;

  5. Odpowiednie przyciski powinny być włączone IFF odpowiednich if wyrażeń zestawieniu są prawdziwe .

Po obu Back i Forward należy załadować ekran z screenvisited w indeksie currentScreen.

+0

kiedy wracam po currentindex 4, wtedy dane z indeksu 4 są takie same jak dane z indeksu 3, myślę, że to nie jest poprawne, więc jak mogę zrobić do przodu w tej chwili nie ma danych do przodu? – XMen

+0

Nie rozumiem, dlaczego dane są takie same. W razie potrzeby możesz wykonać kopie starych danych. – unkulunkulu

0

Jak o tym proste rozwiązanie:

back(){ 
    currentscreenindex-=2; 
    var screen=screenvisited[currentscreenindex+1]; 
    // will go to this screen 
} 

Potem, kiedy „ekran” zostanie załadowany, to będzie przyrost currentscreenindex 1, w wyniku czego currentscreenindex - 2 + 1 - dokładnie to, czego potrzebujesz.

Powiązane problemy