2011-07-29 21 views
9

Quiero implementar la funcionalidad como atrás y hacia adelante en mi proyecto mismo que el navegador, al igual que la página web tenemos la pantalla. lo que he intentado es inicialmente M Ajustar el currentscreenindex=-1cómo implementar la funcionalidad atrás y hacia adelante como navegador

y cuando los datos de la primera pantalla viene ejecutar esta función

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

} 

Aquí es mi función de recuperar lo que he intentado:

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

pero lo mi problema está en estos es:

    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, 

así que cuando los datos de cuarta pantalla llegan, el índice actual obtendrá incrementado, por tanto currentindex=4 y datos en el índice de corriente 4 será de cuarta pantalla, creo que no es correcto, porque si los datos en currentindex=4 conseguirán cambiado, entonces no puedo hacer reenviar, si es así, ¿cómo puedo corregirlo?

Para sugerir cómo puedo escribir la parte posterior y la función adelante para hacer misma funcionalidad que navegador.

+1

Si se trata de una aplicación javascript, podrías usar el hash URL y la historia html5 añadir estados a la historia del navegador, a continuación, usar los comandos de manipulación del historial JS para avanzar y retroceder? Si no, puede aclarar su propósito. – Wylie

Respuesta

19

no sé cómo encajaría esto en cómo se está haciendo actualmente, pero se puede conseguir la funcionalidad de esta manera:

usted tiene dos pilas. Una pila de respaldo y una pila siguiente. Ambos comienzan siendo vacíos. Cuando el usuario navega a una nueva página a través de un enlace o algún otro método de navegación además de atrás/adelante, borre la siguiente pila, agregue la página actual a la pila posterior y continúe navegando. Cuando el usuario hace clic atrás, inserta la página actual en la pila de reenvío, abre una página de la pila posterior y navega hacia la página emergente. Cuando el usuario hace clic hacia adelante, inserta la página actual en la pila posterior, abre una página de la pila hacia adelante y navega hacia la página emergente.

Editar: Usted pidió un poco de pseudocódigo, así que aquí va:

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

Buena respuesta. Se puede ampliar agregando el botón habilitar/deshabilitar. Intenta agregar este código dentro de la función de navegación. if (backStack.count == 0) backButton.Enabled = false; else backButton.Enabled = true; if (forwardStack.count == 0) forwardButton.Enabled = false; else forwardButton.Enabled = true; –

0

Usted debe tener dos números: lastScreenInHistory, currentScreen.

  1. Inicializa ambas en -1.
  2. En la nueva llegada de la pantalla:
    lastScreenInHistory = ++currentScreen; this.screenvisited[this.lastScreenInHistory]=data;

  3. de espalda: if(currentScreen > 0) --currentScreen;

  4. En adelante: if(currentScreen < lastScreenInHistory) ++currentScreen;

  5. respectivos botones deben estar habilitadas si y sólo si los correspondientes if expresiones de los estados son verdaderas .

Después de tanto Atrás y Adelante que se debe cargar la pantalla de screenvisited en el índice currentScreen.

+0

cuando regrese después de currentindex 4, entonces los datos del índice 4 son los mismos que los datos del índice 3, creo que no es correcto, entonces ¿cómo puedo avanzar en este momento los datos de reenvío no están presentes? – XMen

+0

No entiendo por qué los datos son los mismos. Puede hacer copias de datos antiguos si es necesario volver atrás. – unkulunkulu

0

¿Qué hay de esta solución sencilla:

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

Entonces, cuando la 'pantalla' se carga, se incrementará currentscreenindex por 1, lo que resulta en currentscreenindex - 2 + 1 - exactamente lo que necesita.

Cuestiones relacionadas