【问题标题】:Slide div (left to right) from 'behind' a button using jQuery使用 jQuery 从按钮的“后面”滑动 div(从左到右)
【发布时间】:2016-01-21 03:07:13
【问题描述】:

使用本指南的最后一个示例 (http://www.learningjquery.com/2009/02/slide-elements-in-different-directions),我试图让一个 div 来切换按钮的“后面”。

期望的结果示例: 最初包含输入字段、按钮 B 和按钮 C 的 div 将被隐藏。单击“滑动它”按钮时,div 从按钮后面滑入,直到 div 的右侧和“滑动它”按钮之间达到特定距离(边距)。 再次单击按钮时(和/或按下“Esc”键时),div 将滑入按钮。

这是脚本,后面是演示:

$('#button1').click(function() {
    var $marginRighty = $('.inner');
    $marginRighty.animate({
        marginRight: parseInt(
            $marginRighty.css('marginRight'),10) == 0 ?
                $marginRighty.outerWidth() : 0});
});

https://jsfiddle.net/ishq786/xqb5a7dq/

【问题讨论】:

    标签: javascript jquery html css jquery-animate


    【解决方案1】:

    小提琴:https://jsfiddle.net/xqb5a7dq/6/

    $('#button1').on('click', function() {
    	animateDiv();
    })
    
    $(document).keyup(function(e) {
    	if (e.keyCode === 27 && $('.inner').hasClass('visible')) {
    		animateDiv();
    	}
    })
    
    function animateDiv () {
    	$('.inner').toggleClass('visible');
    	$('.inner').animate({
    		width: 'toggle',
    	},350);
    }
    .toolbar {
        width: 100%;
        display: inline-block;
        overflow: hidden;
        white-space: nowrap;
        margin: 0px auto;
        padding: 5px 0px;
        background-color: skyblue;
    }
    
    #divA,
    #divB {
        display: inline;
    }
    
    .inner {
        float: right;
        display: none;
    	padding-right: 20px;
    }
    
    #button1 {
        float: right;
        margin-right: 5px;
    }
    
    input,
    button {
        padding: 5px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class='toolbar'>
        <div>
            <button id="button1">Slide it</button>
        </div>
        <div class="inner is-hidden">
            <div id="divA">
                <input type="text" />
                <input type="password" />
            </div>
            <div id="divB">
                <button>Button B</button>
                <button>Button C</button>
            </div>
        </div>
    </div>

    【讨论】:

    • 谢谢!这更符合我正在寻找的内容。有没有办法让它看起来像 div 来自按钮?还是你觉得这样看起来更优雅?
    • 个人喜好。要使其从按钮上滑动,请从按钮上删除边距并将其作为填充添加回内部 div:jsfiddle.net/xqb5a7dq/3
    • 太棒了!附带说明一下,我在工具栏下方有另一个 div。我想在左输入字段下方显示始终左对齐的文本,并删除两个工具栏之间的间隙。 jsfiddle.net/ishq786/xqb5a7dq/8
    • 谢谢马克,我已经能够使用 ESC 键功能了。
    • 另外,如果我希望切换开关分成 2 个功能(如果我为每个动作做更多的事情)怎么办?我是否使用 outerWidth 方法?
    【解决方案2】:

    Fiddle.

    我已经解决了你的一些问题。我承认我不确定您希望结果如何,所以我将把调整留给您。但主要有两件事;

    1. 我使用 css 将一个放在另一个之上。我将内部 div 定位为 100% 正确,position: relative,顶部的按钮现在将其父 div 从右侧设置为 position: absolute,以便它可以重叠而没有占用空间。我确实将 HTML 中的按钮移到了下方,这样我就不必搞乱 z-index 了,哈哈。
    2. 我将您的 Javascript 移到了一个单独的函数中,这样您就可以通过按键或您喜欢的任何方式调用它。这意味着您不会有代码重复。

    【讨论】:

    • 谢谢。几件事:1)不同的页面宽度,div的工作方式不同,2)可以看到它来自右侧并在按钮后面滑动。我希望 div 被按钮“吃掉”——不要越过按钮。
    • 您可能想在此处发布小提琴中的(部分)代码,以防止链接失效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多