我有一个具有以下结构的页面(缩短了HTML内容的可读性),其中呈现页面时DOM中“pictureinthread” div的顺序基于“voteamount”子div中的投票数(即考虑到picturemeta div,实际上下降了两级)。用户可以动态地给定图像(通过Ajax)投票,从而增加其计数(“voteamount”中的值)。我想,如果div的位置应该根据投票而改变,它可以动态设置动画并采用新的正确位置。我已经使ajax正常工作并且“voteamount”中的数字已更新,但是我的javascript / Jquery经验不足以进一步进行检查,即检查“voteamount”中的所有其他值是否为其他“pictureinthread”并执行如果“pictureinthread”应该移动,动画效果很好。

注意,我意识到当前它只能移动一个位置,但是我希望它能够基于ajax调用返回的值将其移动到“pictureinthread”列表中的任何位置,因为投票逻辑将变得更加复杂。

我正在将Grails与JQuery插件一起使用,当前如下所示,每个div的Ajax如下所示,您可以看到我需要帮助的地方(假设onComplete是http://grails.org/doc/latest/ref/Tags/remoteLink.html的最佳选择)

<g:remoteLink onComplete="HELP ME HERE!" controller="voting" action="upvote" update="upvotes${pictureInThread.id}" id="${pictureInThread.id}"> 

还有我的HTML
    <div class="pictureinthread" id=".."> 
        <img src="..." id="..." class="..."/> 
 
        <div class="picturemeta"> 
            <a href="..ajax call rendered with the g:remotelink..."><img class="thumbsup" src="..."/> <div class="voteamount" id='upvotes+unique...'>3</div></a>      
        </div> 
    </div> 
 
 
    <div class="pictureinthread" id="..."> 
        ..many more like the above.. 
    </div> 

请您参考如下方法:

另外,由于重要的是UX /动画,因此这是另一种方法:
http://jsfiddle.net/andromedado/jhYd7/
基本思想是函数updatePos接受jQuery包装的<div class="pictureinthread">,并将其动画化为相对于其直接同级的正确位置。在jsFiddle中,我在单击时触发了事件,但是在您的模型中,您将在ajax更新时触发它。
的CSS

.rel {postion:relative;} 
JS
function getVN($div){ 
    return parseInt($div.find('.voteamount').text(),10); 
} 
function sendDown($div){ 
    //Prettily Animated Swap of this div with it's next sibling 
    var h = $div.height(), 
        d1 = false, 
        d2 = false, 
        c = $div.add($div.next()).addClass('rel'); 
    $div.animate({top:h},1000,'linear',function(){ 
        d1 = true; 
        if (d1 && d2) { 
            $div.next().after($div); 
            c.removeClass('rel').attr('style',''); 
            updatePos($div); 
        } 
    }); 
    $div.next().animate({top:(-1 * h)},1000,'linear',function(){ 
        d2 = true; 
        if (d1 && d2) { 
            $div.next().after($div); 
            c.removeClass('rel').attr('style',''); 
            updatePos($div); 
        } 
    }); 
} 
function sendUp($div){ 
    //Prettily Animated Swap of this div with it's previous sibling 
    var h = $div.prev().height(), 
        d1 = false, 
        d2 = false, 
        c = $div.add($div.prev()).addClass('rel'); 
    $div.animate({top:(-1 * h)},1000,'linear',function(){ 
        d1 = true; 
        if (d1 && d2) { 
            $div.after($div.prev()); 
            c.removeClass('rel').attr('style',''); 
            updatePos($div); 
        } 
    }); 
    $div.prev().animate({top:h},1000,'linear',function(){ 
        d2 = true; 
        if (d1 && d2) { 
            $div.after($div.prev()); 
            c.removeClass('rel').attr('style',''); 
            updatePos($div); 
        } 
    }); 
} 
function updatePos($div){ 
    var mV = getVN($div), pV, nV; 
    if ($div.prev('.pictureinthread').length) { 
        pV = getVN($div.prev('.pictureinthread')); 
        if (pV < mV) return sendUp($div); 
    } 
    if ($div.next('.pictureinthread').length) { 
        nV = getVN($div.next('.pictureinthread')); 
        if (nV > mV) return sendDown($div); 
    } 
    return true; 
} 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!