我正在尝试用 CSS3 过渡效果替换我的 jQuery (UI) 幻灯片效果,因为它在手持设备上看起来更流畅。
我根据滑动事件向左或向右滑出一个元素,更改其内容,然后从另一侧再次滑入。
老JS
var handleSwipeEvents = function() {
$(function() {
$('#myId').on('swipeleft', swipeHandler);
$('#myId').on('swiperight', swipeHandler);
function swipeHandler(event) {
function slideEffect(swipeLeft, duration) {
var slideOutOptions = {"direction" : swipeLeft ? "left": "right", "mode" : "hide"};
$('#myId').effect("slide", slideOutOptions, duration, function() { // slide out old data
var slideInOptions = {"direction" : swipeLeft ? "right" : "left", "mode" : "show"};
$('#myId').effect("slide", slideInOptions, duration); // slide in new data
// Alter contents of element
});
}
var swipeLeft = (event.type === "swipeleft");
slideEffect(swipeLeft, 300);
}
});
};
我在 CSS 和新 JS 方面只完成了一半。这就是我所拥有的:
CSS
#myId {
position: relative;
padding: 0 10% 0 10%;
transition: all 2s;
-webkit-transition: all 2s;
-moz-transition: all 2s;
}
.slide_left {
position: absolute;
transform: translate3D(-480px, 0, 0);
-webkit-transform: translate3D(-480px, 0, 0);
-moz-transform: translate3D(-480px, 0, 0);
}
.slide_right {
position: absolute;
transform: translate3D(480px, 0, 0);
-webkit-transform: translate3D(480px, 0, 0);
-moz-transform: translate3D(480px, 0, 0);
}
新JS
var handleSwipeEvents = function() {
$(function() {
$('#myId').on('swipeleft', swipeHandler);
$('#myId').on('swiperight', swipeHandler);
function swipeHandler(event) {
var swipeLeft = (event.type === "swipeleft");
function slideOut() {
$('#myId').addClass(swipeLeft ? 'slide_left' : 'slide_right');
}
function slideIn() {
setTimeout(function() {
$('#myId').removeClass('slide_left slide_right');
}, 300);
}
slideOut(); // It should teleport after the animation is done
// Alter contents here?
slideIn();
}
});
};
它的动画效果很好,但是在它移出视口之后,我希望元素“传送”到另一侧,然后再更改其内容,然后再次将其移到中心。给它一个很好的幻灯片效果。
我怎么做?
另外,我觉得我在这里黑客,我如何使代码比现在更漂亮?
我在这一切都错了,如果是这样,更好的方法是什么?