【问题标题】:Photo toggle not coming into view after hiding隐藏后照片切换不显示
【发布时间】:2012-09-21 16:15:38
【问题描述】:

我希望在网页上切换照片/标题。
用户点击,照片出现,然后是标题。
用户再次单击,标题消失,然后照片消失。
用户点击,照片出现,然后是标题。

在第三次单击时,照片会迅速出现(不动画)。 这是我的代码。
(jQuery-1.8.1.min.js)

    $(document).ready(function() {
      $('#photo').width(0).height(0).css('opacity',0);
      $('#caption').hide();
      $('#box').toggle(
       function() {
       $('#photo').stop().show().animate(
         {
           width: '400px',
           height: '300px',
           opacity: 1
         }, 500, function() {
           $('#caption').stop().fadeIn(500);
         }); //end animate
      },
      function() {
        $('#caption').stop().hide(function() {
          $('#photo').stop().fadeOut(500);
        });
       }       
     ); // end toggle
   });

有什么建议吗?
需要更多代码?

更新
为了让图像在每次切换时都进行动画处理,然后图像必须进行动画处理。

EDIT2
更新了 JSFIDDLE
编辑:
另一个问题出现了,这次是动画。
jsFiddle 工作正常,但与实际图像一起使用时,它在第一个循环后不会动画。

【问题讨论】:

  • 发布 HTML 和 jsFiddle 怎么样?
  • 哪个元素应用了内容类?您确定您的切换处理程序正在触发吗?也许添加一个 console.log("toggle - show");到第一个函数和 console.log("toggle - hide");到第二个末尾,然后在 Web 检查器中确认每次单击时都在执行处理程序。
  • @billy 和 iX3 我将元素更改为“html”。目标是用户点击页面上的任意位置,照片/标题出现/消失
  • @user1460015 是显示和隐藏问题还是捕获页面上任何位置的点击事件?见stackoverflow.com/questions/714471/…
  • @iX3 问题是第一次显示图像。一切都正确捕捉,但在切换切换后,图像不显示......只是标题

标签: javascript jquery html css


【解决方案1】:

我正在尝试使用您的原始代码(我刚刚在照片的停止和动画调用之间添加了 .show()),但我看不出有什么问题。它似乎有效,see jsFiddle here

更新:我根据发帖者的要求更改了“隐藏”功能,还更新了 jsFiddle 代码以反映这一点。

$(document).ready(function() {
    $('#photo').width(0).height(0).css('opacity', 0);
    $('#caption').hide();
    $('button').toggle(
        function() {
            console.log("show");
            $('#photo').stop().show().animate({
                width: '400px',
                height: '300px',
                opacity: 1
            }, 100, function() {
                $('#caption').stop().fadeIn(1000);
            }); //end animate
        }, 
        function() {
            console.log("hide");
            $('#caption').stop().hide(function(){
                $('#photo').stop().animate({
                    width: '0px',
                    height: '0px',
                    opacity: 0
                }, 100);
            });
        }
    );
});

【讨论】:

  • 我将您的按钮更改为
    。有用。我看不到我看不到的地方。
  • 好的...所以图像现在弹出...让那部分工作。谢谢。在第一次循环之后,图像会弹出,但 animate 部分被完全避免。换句话说,图像只是快速弹出,淡出,弹出,淡出。动画完全作废。
  • 我认为那是因为当你隐藏它时你并没有“缩小”它。稍后我会更新 jsFiddle。
  • 确实如此。如果您使图像“动画化”(或淡入等)并且您想重复它,那么您必须“动画化”(或淡入淡出等)与它进入时完全相同,这是否总是正确的?感谢您的帮助。
  • 你可以让它为所欲为。只要意识到如果你让它处于某种状态(例如,400px 宽和 300px 高)然后你告诉 jQuery 将它动画到那个状态,它不会做任何事情,因为没有什么可做的(它已经是 400px 宽和 300px 高) )。当你告诉它时,它只会改变。例如,您可能希望重构代码以使用标准转换函数,而不是每次都内联定义它。
【解决方案2】:

编辑 3: 更新代码以在一个周期后工作:http://jsfiddle.net/kLEFy/17/

$(document).ready(function() {
    $('#photo').width(0).height(0).css('opacity', 0);
    $('#caption').hide();
    $('body').toggle(
        function() {
            $('#photo').stop().show().animate({
                width: '400px',
                height: '300px',
                opacity: 1
            }, 1000, function() {
                $('#caption').stop().fadeIn(1000);
            }); //end animate
        }, 
        function() {
            $('#caption').stop().hide(function(){
                $('#photo').stop().fadeOut();
                $('#photo').width(0).height(0).css('opacity', 0);
            });
        }
    );
});​

【讨论】:

  • 我想继续使用 toggle() 事件。
  • 谢谢。它确实有效。但是当我尝试使用实际图像时,图像在第一个周期后停止出现。只显示标题。我想知道这是否与缓存有关(溢出:隐藏)?
  • 见下文...我得到了它的工作,但动画在第一次循环后被避免
猜你喜欢
相关资源
最近更新 更多
热门标签