使用渐变和附加


74

我正在将JSON数据加载到页面并使用,appendTo()但是我试图淡化结果,有什么想法吗?

$("#posts").fadeIn();
$(content).appendTo("#posts");

我发现文档上的append和之间存在差异appendTo

我也尝试过这个:

$("#posts").append(content).fadeIn();

我明白了,上面的技巧!

但是我将其"undefined"作为我的JSON值之一。

Answers:


169

如果在添加内容之前将其隐藏并链接到fadeIn方法,则应获得所需的效果。

// Create the DOM elements
$(content)
// Sets the style of the elements to "display:none"
    .hide()
// Appends the hidden elements to the "posts" element
    .appendTo('#posts')
// Fades the new content into view
    .fadeIn();

我正在尝试$(elem).slideUp()。appendTo(div).slideDown(); 但它并没有按顺序执行FF5。我使用的是slideUp的回调,然后按顺序追加和slideDown,但随后append没有回调,因此该元素看起来已经可见。肯特·弗雷德里克(Kent Fredric)的答案解决了这个问题,因此我只关心在向下滑动幻灯片之前执行附加操作。
TuteC'8

1
肯特的答案确实使用了带有回调的slideUp和slideDown之类的动画方法,但是OP确实只需要在方法链末尾使用动画。您需要进一步的帮助吗?
凯文·高斯基

7

我不知道我是否完全了解您遇到的问题,但是类似的事情应该可以解决:

HTML:

<div id="posts">
  <span id="post1">Something here</span>
</div>

Javascript:

var counter=0;

$.get("http://www.something/dir",
    function(data){
        $('#posts').append('<span style="display:none" id="post' + counter + ">" + data + "</span>" ) ;
        $('#post' + counter).fadeIn();
        counter += 1;
    });

基本上,您是将每个内容(每个“帖子”)包装在一个跨度中,将该跨度的显示设置为无,以使其不显示,然后淡入。


如何以非常复杂的方式完成简单事情的绝佳示例。抱歉;)
Sliq 2013年

4

我认为这应该可以解决您的问题。

$('#content').prepend('<p>Hello!</p>');
$('#content').children(':first').fadeOut().fadeIn();

如果要附加,则必须使用:last选择器。


3

您必须意识到代码不是线性执行的。动画的东西不能指望停止执行代码来执行动画然后返回。


   commmand(); 
   animation(); 
   command();  

This is because the animation uses set timeout and other similar magic to do its job and settimeout is non-blocking.

This is why we have callback methods on animations to run when the animation is done ( to avoid changing something which doesn't exist yet )

   command(); 
   animation( ... function(){ 
      command(); 
   });


2

假设您在css中定义了以下内容:

.new {display:none} 

并且javascript应该是:

$('#content').append('<p class='new'>Hello!</p>');
$('#content').children('.new').fadeIn();
$('#content').children.removeClass('new');
$('#content').children('.new').hide();

1

首先是将接收到的数据转换为jQuery Object。第二,立即将其隐藏。第三,将其附加到目标节点。而且,毕竟,我们可以清楚地使用必要的动画,就像fadeIn :)

jNode = $("<div>first</div><div>second</div>");
jNode.hide();
$('#content').append(jNode);
jNode.fadeIn();

0

我为此感到费解:

$("dt").append(tvlst.ddhtml);
$("dd:last").fadeIn(700);

什么是“昂贵”?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.