javascript - 在行内 block 包装行下方添加一个 div - 第 2 部分

标签 javascript jquery html css

@musicnothing 在较旧的 thread 中建议的解决方案在行内 div 下方显示一个内容 div,当 div.wrapblock 本身被点击时,这很有效。

http://jsfiddle.net/SYJaj/7/

function placeAfter($block) {
    $block.after($('#content'));
}

$('.wrapblock').click(function() {
    $('#content').css('display','inline-block');
    var top = $(this).offset().top;
    var $blocks = $(this).nextAll('.wrapblock');
    if ($blocks.length == 0) {
        placeAfter($(this));
        return false;
    }
    $blocks.each(function(i, j) {
        if($(this).offset().top != top) {
            placeAfter($(this).prev('.wrapblock'));
            return false;
        } else if ((i + 1) == $blocks.length) {
            placeAfter($(this));
            return false;
        }
    });
});

我遇到的问题。 我需要触发相同的效果,但需要将点击事件添加到 wrapblock 本身内的链接。

我的代码几乎相同。

我改变的是点击事件句柄,从 $('.wrapblock').click(function()$('.more').on('click ', function() 我还需要为内容 div 添加 .closest(".wrapblock") 以将其自身定位在 wrapblock 之外。

$('.more').on('click', function() {
...
if ($blocks.length == 0) {
        placeAfter($(this).closest(".wrapblock"));
        return false;
    }

万物皆可看可测http://jsfiddle.net/7Lt1hnaL/

如果有人能阐明我如何使用偏移方法计算它需要跟随哪个 block ,那就太好了,在此先感谢。

如您在最新的 fiddle 示例中所见,内容 div 未显示在 div 行下方。

我也很抱歉,我想在讨论的线程上发帖,但我的发帖名气很小,不允许我发帖,谢谢。

最佳答案

var $chosen = null;
var $allBlocks = [];
$(function(){
	$allBlocks = $('.wrapblock');
})

$(window).on('resize', function() {
    if ($chosen != null) {
        $('#content').css('display','none');
        $('body').append($('#content'));
        $chosen.trigger('click');   
    }
});

$('.more').on('click', function() {
    $chosen = $(this);
    var position = $chosen.parent('.wrapblock').position();
    $('#content').css('display','inline-block');
    $allBlocks.filter(function(idx, ele){
    	return $(ele).position().top == position.top;
    })
    .last()
    .after($('#content'));
});
.wrapblock
{
    background: #963a3a;
    display: inline-block;
    width: 90px;
    height: 90px;
    color: white;
    font-size: 14px;
    text-align: left;
    padding: 10px;
    margin: 10px;
    vertical-align:top;
    position:relative;
}

#content
{
    display:none;
    vertical-align:top;
    width:100%;
    background: #5582c1;
    font-size: 12px;
    color: white;
    padding: 10px;
}
.more {
    position:absolute;
    bottom:15px;
    right:15px;
    cursor:pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<div class="wrapblock">1
<span class="more" data-ref="1">more</span>
</div>
<div class="wrapblock">2
<span class="more" data-ref="2">more</span>
</div>
<div class="wrapblock">3
<span class="more" data-ref="3">more</span>
</div>
<div class="wrapblock">4
<span class="more" data-ref="4">more</span>
</div>
<div class="wrapblock">5
<span class="more" data-ref="5">more</span>
</div>
<div class="wrapblock">6
<span class="more" data-ref="6">more</span>
</div>
<div class="wrapblock">7
<span class="more" data-ref="7">more</span>
</div>
<div class="wrapblock">8
<span class="more" data-ref="8">more</span>
</div>
<div class="wrapblock">9
<span class="more" data-ref="9">more</span>
</div>
<div id="content">Some Content</div>

似乎做你想做的。基本上,它只是将所有 block 的集合过滤到您单击的 block 的行,假设它们都具有相同的垂直偏移(顶部),然后取最后一个,因为 jQuery 会将它们保存在文档中顺序,所以这将是布局行中的最后一个。

哦,我更新了 fiddle http://jsfiddle.net/7Lt1hnaL/1/

关于javascript - 在行内 block 包装行下方添加一个 div - 第 2 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50260362/

相关文章:

javascript - 使用nodejs发送和接收数据而不将其显示在我的页面上?

javascript - Zurb Foundation 顶部栏根本不工作

html - 从 Markdown 文件中删除 HTML 注释

javascript - 使用 HTML5 Navigation Timing API 时 navigationStart 时间设置为 0

javascript - 如何限制每个页面中的HTML表格记录

javascript - ReactDOM.hydrate() 在初始 SSR 后不工作(React JS)

javascript - 如何为任何给定的库编写 Bundle.CdnFallbackExpression?

javascript - 如何检查 Ajax 返回的 JSON 的正确性

javascript - 更改背景颜色 ng-click

javascript - Chrome 和 Firefox 的 window.close() 方法的替代方法