3 Stimmen

Alternative zu Push.js

Ich baue eine Hybrid-App mit Phonegap, aber ich möchte Ratchet nicht verwenden, gibt es eine Alternative zu Ratchets push.js?

Ich möchte, dass der Benutzer zwischen den Seiten wechselt, ohne dass die Seite neu geladen wird.

4voto

kindasimple Punkte 2407

Eine Möglichkeit besteht darin, einen funktionalen Router zu finden (zum Beispiel Backbone), den Inhalt Laden/Übergangscode von push.js herauszunehmen und benutzerdefinierten Code zu schreiben, um Ihre Benutzeroberfläche in den DOM zu verpacken und einzufügen.

push.js enthält Code zur Verwaltung des Browserverlaufscaches und zum Senden von Ajax-Anfragen zur Unterstützung seiner Inhaltsanfragen. Wenn Sie wie ich ein MV* wie Backbone verwenden, können Sie Ihre Ansichten in eine modifizierte Version des push.js success XHR-Handlers verpacken und einspeisen. Neben der swapContent -Methode sind die assoziativen Arrays bars und transitionMap alles, was Sie benötigen, um Ihren Inhalt an den DOM anzuhängen und zu einer neuen Seite zu wechseln.

Ich mag die gestellte Frage, weil es nicht klar ist, wie die Lücke zwischen minimalistischen UI-Frameworks, die nicht viel über Prototyping hinausgehen, wie Ratchet und ChocolateChipUI, und vollständigen Angular-Frameworks wie Ionic oder OnsenUI zu füllen ist.

Hier sind die Code-Elemente, die Sie aus push.js ausleihen müssen

 var transitionMap = {
  slideIn: 'slide-out',
  slideOut: 'slide-in',
  fade: 'fade'
};

var bars = {
  bartab: '.bar-tab',
  barnav: '.bar-nav',
  barfooter: '.bar-footer',
  barheadersecondary: '.bar-header-secondary'
};

var transition = function (data, options) {
    var key;
    var barElement;

    if (data.title) {
      document.title = data.title;
    }

    if (options.transition) {
        for (key in bars) {
            if (bars.hasOwnProperty(key)) {
                barElement = document.querySelector(bars[key]);
                if (data[key]) {
                    swapContent(data[key], barElement);
                } else if (barElement) {
                    barElement.parentNode.removeChild(barElement);
                }
            }
        }
    }

    swapContent(data.contents, options.container, options.transition, function () {});

};

var swapContent = function (swap, container, transition, complete) {
    var enter;
    var containerDirection;
    var swapDirection;

    if (!transition) {
        if (container) {
          container.innerHTML = swap.innerHTML;
        } else if (swap.classList.contains('content')) {
          document.body.appendChild(swap);
        } else {
          document.body.insertBefore(swap, document.querySelector('.content'));
        }
    } else {
        enter = /in$/.test(transition);

        if (transition === 'fade') {
          container.classList.add('in');
          container.classList.add('fade');
          swap.classList.add('fade');
        }

        if (/slide/.test(transition)) {
          swap.classList.add('sliding-in', enter ? 'right' : 'left');
          swap.classList.add('sliding');
          container.classList.add('sliding');
        }

        container.parentNode.insertBefore(swap, container);
    }

    if (!transition) {
        complete && complete();
    }

    if (transition === 'fade') {
        container.offsetWidth; // erzwingt Reflow
        container.classList.remove('in');
        var fadeContainerEnd = function () {
            container.removeEventListener('webkitTransitionEnd', fadeContainerEnd);
            swap.classList.add('in');
            swap.addEventListener('webkitTransitionEnd', fadeSwapEnd);
        };
        var fadeSwapEnd = function () {
            swap.removeEventListener('webkitTransitionEnd', fadeSwapEnd);
            container.parentNode.removeChild(container);
            swap.classList.remove('fade');
            swap.classList.remove('in');
            complete && complete();
        };
        container.addEventListener('webkitTransitionEnd', fadeContainerEnd);
    }

    if (/slide/.test(transition)) {
        var slideEnd = function () {
            swap.removeEventListener('webkitTransitionEnd', slideEnd);
            swap.classList.remove('sliding', 'sliding-in');
            swap.classList.remove(swapDirection);
            container.parentNode.removeChild(container);
            complete && complete();
        };

        container.offsetWidth; // erzwingt Reflow
        swapDirection = enter ? 'right' : 'left';
        containerDirection = enter ? 'left' : 'right';
        container.classList.add(containerDirection);
        swap.classList.remove(swapDirection);
        swap.addEventListener('webkitTransitionEnd', slideEnd);
    }
};

Und Sie können zu neuem Inhalt übergehen

var data = {
  bartab: menuDOM,
  barnav: navigationDOM,
  barfooter: null,
  barheadersecondary: null,
  title: "Neue Seite",
  content: pageContentDOM
};

var options = {
        transition: "slide-in",
        container: document.querySelector(".content")
};

transition(data, options);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X