【问题标题】:add transitions to a hide/show javascript dom添加过渡到隐藏/显示 javascript dom
【发布时间】:2010-12-01 08:30:08
【问题描述】:

我有这个功能(还有 3 个类似的功能)

function property (){
 document.getElementById("property").style.display = "block";
 document.getElementById("hotel").style.display = "none";
 document.getElementById("other").style.display = "none";
 document.getElementById("main").style.display = "none";
 }

如何在 div 的变化中添加过渡。该函数在链接上调用。

现在它只显示被点击的 div,并隐藏其他的。但我希望旧 div 淡出,新 div 淡入..

谢谢

【问题讨论】:

    标签: javascript transition


    【解决方案1】:

    一种流行的方式是使用 jQuery:

    $('#property').fadeIn();
    

    就是这样。页面http://api.jquery.com/fadeIn/ 有一些演示。

    【讨论】:

      【解决方案2】:

      用法(Demo

      fadeIn(element, 200); // ms
      fadeIn("#element_id", 300);
      fadeOut(element, 600, function() {
        alert("fade finished");
      });
      

      代码

      function fade(dom, current, target, duration, after) {
        duration = duration || 600;
        if (typeof dom === "string")
          dom = document.getElementById(dom);
        var start = +new Date();
        var finish = start + duration;
        var easing = function (pos) {
          return (-Math.cos(pos * Math.PI) / 2) + 0.5;
        };
        var interval = setInterval(function () {
          var now = +new Date();
          var pos = now > finish ? 1 : (now - start) / duration;
          setOpacity(dom, interpolate(current, target, easing(pos)));
          if (now > finish) {
            clearInterval(interval);
            after && after();
          }
        }, 13);
      }
      
      function fadeIn(dom, duration, after) {
        fade(dom, 0, 1, duration, after);
      }
      function fadeOut(dom, duration, after) {
        fade(dom, 1, 0, duration, after);
      }
      
      function setOpacity(obj, value) {
        if (obj) {
          obj.style.opacity = value;
          obj.style.filter = 'alpha(opacity=' + value * 100 + ')';
          obj.style.zoom = 1;
        }
      }
      function interpolate(source, target, pos) {
        return (source + (target - source) * pos).toFixed(3);
      }​
      

      【讨论】:

      • 谢谢。它的工作。但是,在显示新的 div 之前,您会看到背景.. 可以避免这种情况。也许让旧的 div 稍后淡出。也许淡入开始晚了..在哪里改变它??
      • 哦,我的一个 div 包含一个 swf。它似乎不起作用..?
      • 我不完全明白你的问题是什么。如果您希望在两种状态之间进行转换,您需要同时启动fadeInfadeOut。此外,如果您希望 div 重叠,您需要一个带有 position:relaitve 的容器,并且 div 为 position:absolute。这样,过渡发生在重叠的 div 之间,从一个渐变到另一个。如果您需要更多帮助,请在 jsbin.com 上发布示例。
      • swf:使用wmode="transparent"
      • jsbin.com/upoqi4/edit。我想避免的是 2 个 div 之间的毫秒(或其他)..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-14
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多