2

ここには、単に表示するのではなく、スライドさせたい基本的な JS が少しあります (グリッチに見えます)。

いろいろ試してみたのですが、うまくいきません。何かアイデアはありますか?Jsfiddle が後に続くコードを次に示します。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<style>
body{margin:0;}
#foo{min-width:400px; height:100%; background-color:#9C0; display:none; position:absolute; right:0px; top:0px;}


</style>
<body>
<a href="#" onclick="toggle_visibility('foo');">Click here to toggle visibility of element #foo</a>
<div id="foo" >



</div>


<script type="text/javascript">
<!--
    function toggle_visibility(id) {
       var e = document.getElementById(id);
       if(e.style.display == 'block')
          e.style.display = 'none';
       else
          e.style.display = 'block';
    }
//-->
</script>
</body>
</html>

Jsフィドル

4

3 に答える 3

5

ここでわかるように、VanillaJSを使用してフィドルを更新しました。完全にうまく機能します

document.getElementById('bar').onclick = (function()
{
    var that, interval, step = 20,
    id = document.getElementById('foo'),
    handler = function()
    {
        that = that || this;
        that.onclick = null;
        id = document.getElementById('foo');
        interval =setInterval (function()
        {
            id.style.right = (parseInt(id.style.right, 10) + step)+ 'px';
            if (id.style.right === '0px' || id.style.right === '-400px')
            {
                that.onclick = handler;
                clearInterval(interval);
                if (id.style.right === '-400px')
                {
                    id.style.display = 'none';
                }
                step *= -1;
            }
            else
            {
                id.style.display = 'block';
            }
        },100);
    };
    return handler;
}());

コードの説明:

  • 動的にアンバインド/バインドする必要があるため、クリック ハンドラーを JS にアタッチします。
  • ハンドラーを直接割り当てる代わりに、クロージャーを使用しています (間隔と DOM 参照用)
  • handlerは実際のイベント ハンドラーであり、そのコンテキスト (クリックされた要素) を に割り当てます。thatこれにより、インターバル コールバックでそれを参照し、ハンドラーのバインドを解除できます。
  • 間隔は、要素の位置をstepピクセル単位で変更します (この値を好きなように設定してください)。
  • div が位置 0 または -400 にある場合は、間隔をキャンセルし (そのため、間隔 ID をスコープ内に保持するためにクロージャが必要ですが、グローバルに公開しないようにする必要があります)、クリック ハンドラーを再バインドしてstep *= -1、アニメーションを反転します。
  • 表示プロパティを設定する

setこのインターバル シーケンスは10050ミリ秒ごとに発生するように設定されていますが、これは少し不安定です。

于 2013-07-04T10:21:17.147 に答える
1

私があなたを正しく理解していれば、スライド効果には jQuery を使用してください。

Jsフィドル。

JS:

$("a").on('click', function() {
    $("#foo").slideToggle();
});
于 2013-07-04T10:08:25.467 に答える