代码之家  ›  专栏  ›  技术社区  ›  ngreenup

$(这个)不可用-我缺少什么?

  •  1
  • ngreenup  · 技术社区  · 10 年前

    http://jsfiddle.net/ZGnTe/

        function iphoneAnimate() {
            $('.iphone-screen div').repeat().css({
            opacity: 0,
            top: 0
        })
            .each($).fadeTo(1000, 1).animate({
            top: $('.iphone-screen').height() - $(this).find('img').height()
        }, 4000).fadeTo(1000, 0, $);
    }
    
    iphoneAnimate();
    

    $(this)不返回包含图像的div。当我试图将img标记的高度设置在$(this)内时,它根本没有返回任何值。我使用的是jquery计时插件,但我认为问题在于我的语法,而不是插件。不确定。

    顶值应该是负数。例如,iphone屏幕的高度(577)减去当前divs图像的高度(第一个是1375)。这应该会使图像div向上移动,使其刚好到达屏幕中图像的底部。

    3 回复  |  直到 10 年前
        1
  •  0
  •   Yan Brunet    10 年前

    您需要在一个链接元素之后使用回调函数,否则这些值只计算一次。

    function iphoneAnimate() {
        $('.iphone-screen div').repeat().css({
            opacity: 0,
            top: 0
        })
        .each($)
        .fadeTo(1000, 1)
        .then(function(){ 
            $(this).animate({top: $('.iphone-screen').height() - $(this).height()
                                                                  },4000);})
        .fadeTo(1000, 0, $);
    }
    
    iphoneAnimate();
    

    工作演示: http://jsfiddle.net/ZGnTe/2/

        2
  •  0
  •   skeryl    10 年前

    可能是因为传递到.animate()函数中的财产本身不是函数。

    尝试可以获得相同结果的不同选择器 例如

    function iphoneAnimate() {
        $('.iphone-screen div').repeat().css({
            opacity: 0,
            top: 0
        })
            .each($).fadeTo(1000, 1).animate({
            top: $('.iphone-screen').height() - $('div img').height()
        }, 4000).fadeTo(1000, 0, $);
    }
    

    这是小提琴的链接: http://jsfiddle.net/ZGnTe/1/


    我认为“this”对象只能在回调函数中访问。

    为了补偿“div img”选择器的通用性,可以添加一个过滤器(例如 .filter(":animated") )仅获取正在设置动画的项目。

    我建议按照以下示例扩展每个函数:( https://api.jquery.com/each/#example-1 ).

        3
  •  0
  •   DotCastle    10 年前

    我认为,表达式$(this)是在iPhoneAnimate方法的上下文中计算的。由于您在没有特定上下文的情况下调用该方法,因此其结果为空。

    如果您是从委托或匿名方法中访问它,那么它将被计算为jquery对象的上下文。