Hammer.js 和 jQuery 混淆 类
Hammer.js and jQuery confusing classes
我正在尝试制作一个可以 运行 在我的 phone 上的网络应用程序。我正在使用 Hammer.js 库来识别触摸手势,并使用 animate.css 来识别动画。我使用 swipeleft
和 swiperight
触摸识别器来更改某些 div
元素的 类。然而,当我使用 swiperight
然后 swipeleft
(在 chrome 或我的 iphone 上测试它时)它得到 类 混合并且元素在位置不对。
这是我的一些代码
index.html
<div class="container" id="app">
<div class="row">
<div class="col-xs-10 co-xs-offset-1 col-md-4 app_card active_app_card animated id="app2">
<!-- More code -->
</div>
<div class="col-xs-10 co-xs-offset-1 col-md-4 app_card animated id="app1">
<!-- More code -->
</div>
<div class="col-xs-10 co-xs-offset-1 col-md-4 app_card animated id="app3">
<!-- More code -->
</div>
</div>
</div>
stylesheet.css
.app_card {
position: absolute;
right: -100%;
}
.active_app_card {
right: auto;
left: auto;
}
main.js
$(function() {
var app1 = document.getElementById("app1");
var app2 = document.getElementById("app2");
var app3 = document.getElementById("app3");
Hammer(app1).on("swipeleft", function() {
console.log("app1 left");
$("#app1").addClass("slideOutLeft");
$("#app2").addClass("bounceInRight active_app_card").one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function() {
$("#app1").removeClass("slideOutLeft active_app_card");
$("#app2").removeClass("bounceInRight");
});
});
Hammer(app2).on("swiperight", function() {
console.log("app2 right");
$("#app2").addClass("slideOutRight");
$("#app1").addClass("bounceInLeft active_app_card").one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function() {
$("#app2").removeClass("slideOutRight active_app_card");
$("#app1").removeClass("bounceInLeft").addClass("active_app_card");
});
});
问题是当 app2
出现在屏幕上时我向右滑动,然后当 app1
出现在屏幕上时向左滑动,动画有效并且 app2
出现在屏幕上,但是只要动画结束,app2
消失,app1
回来。如果我再次向左滑动,app2
会正确出现在屏幕上。有什么方法可以阻止 app1
在我滑开它时出现?
我似乎通过在当前结束之前不开始新动画来解决这个问题。我已经对代码做了很多更改,所以我不能再 post 确切的代码(这可能会引起一些混乱)。基本上我所做的是设置一个变量,该变量在动画为 运行 时为真。所以当 hammer 检测到滑动时,它会检查变量以查看动画当前是否为 运行。
这里是代码的简化形式
window.animating = true;
Hammer(app).on("swiperight", function() {
if ( window.animating === true ) {
console.log("animation currently running");
} else {
//next animation code
}
}
我正在尝试制作一个可以 运行 在我的 phone 上的网络应用程序。我正在使用 Hammer.js 库来识别触摸手势,并使用 animate.css 来识别动画。我使用 swipeleft
和 swiperight
触摸识别器来更改某些 div
元素的 类。然而,当我使用 swiperight
然后 swipeleft
(在 chrome 或我的 iphone 上测试它时)它得到 类 混合并且元素在位置不对。
这是我的一些代码
index.html
<div class="container" id="app">
<div class="row">
<div class="col-xs-10 co-xs-offset-1 col-md-4 app_card active_app_card animated id="app2">
<!-- More code -->
</div>
<div class="col-xs-10 co-xs-offset-1 col-md-4 app_card animated id="app1">
<!-- More code -->
</div>
<div class="col-xs-10 co-xs-offset-1 col-md-4 app_card animated id="app3">
<!-- More code -->
</div>
</div>
</div>
stylesheet.css
.app_card {
position: absolute;
right: -100%;
}
.active_app_card {
right: auto;
left: auto;
}
main.js
$(function() {
var app1 = document.getElementById("app1");
var app2 = document.getElementById("app2");
var app3 = document.getElementById("app3");
Hammer(app1).on("swipeleft", function() {
console.log("app1 left");
$("#app1").addClass("slideOutLeft");
$("#app2").addClass("bounceInRight active_app_card").one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function() {
$("#app1").removeClass("slideOutLeft active_app_card");
$("#app2").removeClass("bounceInRight");
});
});
Hammer(app2).on("swiperight", function() {
console.log("app2 right");
$("#app2").addClass("slideOutRight");
$("#app1").addClass("bounceInLeft active_app_card").one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function() {
$("#app2").removeClass("slideOutRight active_app_card");
$("#app1").removeClass("bounceInLeft").addClass("active_app_card");
});
});
问题是当 app2
出现在屏幕上时我向右滑动,然后当 app1
出现在屏幕上时向左滑动,动画有效并且 app2
出现在屏幕上,但是只要动画结束,app2
消失,app1
回来。如果我再次向左滑动,app2
会正确出现在屏幕上。有什么方法可以阻止 app1
在我滑开它时出现?
我似乎通过在当前结束之前不开始新动画来解决这个问题。我已经对代码做了很多更改,所以我不能再 post 确切的代码(这可能会引起一些混乱)。基本上我所做的是设置一个变量,该变量在动画为 运行 时为真。所以当 hammer 检测到滑动时,它会检查变量以查看动画当前是否为 运行。
这里是代码的简化形式
window.animating = true;
Hammer(app).on("swiperight", function() {
if ( window.animating === true ) {
console.log("animation currently running");
} else {
//next animation code
}
}