我正在用Phonegap开发一个混合应用程序,但是我不想使用棘轮,除了棘轮push.js还有其他的选择吗?
我希望用户在不刷新页面的情况下在页面之间移动。
发布于 2014-11-18 03:31:55
一种选择是找到一个功能路由器(例如主干),从push.js中提取内容加载/转换代码,并编写一些自定义代码来打包UI并将其注入DOM中。
push.js有管理浏览器历史缓存和使ajax请求支持其内容请求的代码。如果您使用的是一些MV*,比如主干(我是这样的),您可以将视图打包并输入到修改后的push.js success XHR处理程序中。此外,swapContent方法、bars & transitionMap关联数组是将内容附加到DOM和转换到新页面所需的全部内容。
我喜欢你提出的问题,因为它不清楚如何填补极简型UI框架之间的空白,这些框架不会超出像棘轮和ChocolateChipUI这样的原型化,以及完整的角度框架Ionic或OnsenUI。
下面是您需要从push.js借用的代码元素
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; // force 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; // force reflow
swapDirection = enter ? 'right' : 'left';
containerDirection = enter ? 'left' : 'right';
container.classList.add(containerDirection);
swap.classList.remove(swapDirection);
swap.addEventListener('webkitTransitionEnd', slideEnd);
}
};并且您可以转换到新内容。
var data = {
bartab : menuDOM,
barnav : navigationDOM,
barfooter : null,
barheadersecondary : null
title: "New Page",
content: pageContentDOM
};
var options = {
transition: "slide-in",
container: document.querySelector(".content")
};
transition(data, options);https://stackoverflow.com/questions/26977948
复制相似问题