动画 Div 以揭示其背后的 Div

Animate Div to Reveal Div Behind It

编辑:有人指出我的原始 jsFiddle 代码中存在语法错误 - 已修复。那是无意的,不是我的问题。我的问题不是做我现在做的事情,而是如何制作动画以便有幻灯片动画?谢谢,抱歉造成混淆!

我正在尝试构建一个测验,您可以在其中单击一个单选按钮,然后会出现一个滑动动画,显示下一个问题。我尝试使用 .slideToggle 但它不起作用,或者至少我可以让它工作。

有什么想法吗?我试图坚持使用常规的 ole' jQuery 而不是 UI 以节省性能。

Here's a jsFiddle of what I have so far。现在,我目前添加了一个 class,它将更高的 z-index 添加到另一个后面的 div。但我想要一个滑动动画。

HTML

<div class="container">
<form id="question1" class="panel">
    <input type="radio" name="test1" value="1">1
    <input type="radio" name="test1" value="2">2
</form>
<form id="question2" class="panel">
    <input type="radio" name="test2" value="3">3
    <input type="radio" name="test2" value="4">4
</form>
</div>

CSS

.container {
    width: 500px;
    height: 500px;
    position: relative;
}

#question1, #question2 {
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
}

#question1 {
    z-index: 10;
    background-color: blue;
}

#question2 {
    background-color: red;
}

.z-index20 {
    z-index: 20
}

JS

$('#question1 input').on('change', function() {
    var $questionAnswer1 = $('input[name=test1]:checked', '#question1').val();    
    $("#question2").addClass("z-index20");

    $('#question2 input').on('change', function() {
        var $questionAnswer2 = $('input[name=test2]:checked', '#question2').val(); 
    });
});

谢谢!

你的js有语法错误,所以连运行都没有。

只要解决这个问题,你就可以了。 (忘记关闭第一个功能) 你破碎的缩进让人很困惑。

试试这个大小,我们基本上只是在每个问题的左侧设置中添加一个过渡,然后将其关闭 canvas。

(Demo)

var handleChange = function (e) {
    e.target.parentNode.style.transition = 'left 1s ease-in-out';
    e.target.parentNode.style.left = '100%';
}
var options = document.querySelectorAll('[id*="question"] input');
for (var i = 0; i < options.length; i++) {
    options[i].addEventListener('change', handleChange, false);
}

与jQuery

相同的脚本

(Demo)

var handleChange = function(e) {
    $(e.target.parentNode).css('transition', 'left 1s ease-in-out');
    $(e.target.parentNode).css('left', '100%');
}
$('[id*="question"] input').on('change',handleChange);

滑动

我建议滑动层 off 而不是第二层 on。 jQuery 也有一个 非常 简单易行的方法,使用 .animate()

 $('#question1').animate({
    'left': '-510px' // 500 is width of container plus 10px for default margin
}, 200); // Adjust 200

你也可以添加回调函数:

$('#question1').animate({
    'left': '-510px' // 500 is width of container plus 10px for default margin
}, 200, function () { // Adjust 200
    var questionAnswer = $(this).find('input[name=test2]:checked');
});

JSFiddle


语法错误

在你的代码中,你的主要错误在这里:

$('#question2 input').on('change', function() {
    var $questionAnswer2 = $('input[name=test2]:checked', '#question2').val(); 

您需要关闭它以导致:

$('#question2 input').on('change', function() {
    var $questionAnswer2 = $('input[name=test2]:checked', '#question2').val(); 
});

像这样的小语法错误可能会非常麻烦(我注意到将近 400 次修订),幸运的是你可以使用 [=17 这样的网站=]。这也集成在 JSFiddle 中。


Fixed Fiddle