1)不要在主体上加上div和#34; primaryfade," "伯,"和"框",我宁愿在我没有上课的时候点击的元素"淡出"但是有新课程" primary"和"初级淡出" (同时仍保留班级"框")。
2)在我的小提琴中,我意识到任何曾经上过课程的盒子" primary"如果再次单击,则移动到非第一个位置不再触发动画。我不知道为什么会这样,但是我喜欢任何元素在点击时移回到第一个位置。
我确信我的jQuery可以写得更优雅。我对它不是很有经验。这是为了证明概念。
http://jsfiddle.net/q6rtgh79/3/
HTML -
<div class="primary box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="box">4</div>
<div class="box">5</div>
CSS -
body {border:1px solid;}
.box {color:white;font-weight:bold;transition: opacity 1s, background 1s;display:inline-block;width: 40px;height:40px;background: gray;margin-left: 20px;}
.box:first-child {margin:0;}
.box4 {background: pink;}
.allmove .box {transition: transform .5s ease-in-out;transform: translate3d(150%,0,0);}
.allmove .fade-out ~ .box, .primary, .primary ~ .box {
transform: translate(0,0)!important;}
.primary {background:green;}
.fade-out, .primaryfade {opacity: 0;}
jQuery -
$(function() {
$(".box:not(:first-child)").click(function() {
$(this).addClass("fade-out");
$(".primary").removeClass("primary");
setTimeout(function() {
$("body").addClass("allmove");
}, 1000);
setTimeout(function() {
$("body").prepend("<div class=\"primaryfade primary box\">new</div>");
}, 1500);
setTimeout(function() {
$("div[class*='fade-out']").remove();
}, 1500);
setTimeout(function() {
$("body").removeClass("allmove");
}, 1500);
setTimeout(function() {
$("[class*='primaryfade']").removeClass("primaryfade")
}, 2000);
});
});
答案 0 :(得分:1)
我认为您应该使用 on() 来动态添加框,例如
$(document).on('click',".box:not(:first-child)",function() {
....
....
});
它将解决你的第二点以及第一个问题。请参阅 updated fiddle
您可以将动画合并1500秒,例如
$(function () {
$(document).on('click', ".box:not(:first-child)", function () {
$(this).addClass("fade-out");
$(".primary").removeClass("primary");
setTimeout(function () {
$("body").addClass("allmove");
}, 1000);
// merge the functions which are called after 1500ms
setTimeout(function () {
$("body").prepend("<div class=\"primaryfade primary box\">new</div>");
$("div[class*='fade-out']").remove();
$("body").removeClass("allmove");
}, 1500);
setTimeout(function () {
$("[class*='primaryfade']").removeClass("primaryfade")
}, 2000);
});
});
答案 1 :(得分:1)
使用这样的东西: -
$(function() {
function clickEvent(){
$(".box:not(:first-child)").off("click");
$(".box:not(:first-child)").on("click",function() {
console.log('here')
$(this).addClass("fade-out");
$(".primary").removeClass("primary");
setTimeout(function() {
$("body").addClass("allmove");
}, 1000);
setTimeout(function() {
$("body").prepend("<div class=\"primaryfade primary box\">new</div>");
clickEvent();
}, 1500);
setTimeout(function() {
$("div[class*='fade-out']").remove();
}, 1500);
setTimeout(function() {
$("body").removeClass("allmove");
}, 1500);
setTimeout(function() {
$("[class*='primaryfade']").removeClass("primaryfade")
}, 2000);
});
}
clickEvent()
});
答案 2 :(得分:1)
我同意Rohan,但是为了解决你的第一点“,我宁愿在我刚刚点击的元素前面”而不是
setTimeout(function () {
$("body").prepend("<div class=\"primaryfade primary box\">new</div>");
$("div[class*='fade-out']").remove();
$("body").removeClass("allmove");
}, 1500);
使用
var item = $(this);
setTimeout(function (item) {
$("body").prepend(item.removeClass('fade-out').addClass('primaryfade').addClass('primary').addClass('box').html('new'));
$("div[class*='fade-out']").remove();
$("body").removeClass("allmove");
}, 1500, item);
这将:
fade-out
类primary
和primaryfade
以及box
类