1

我希望 javascript 代码以慢动作显示 div。

function showDiv(divID)
{
       if(document.getElementById(divID).style.display=='none')
       {
           document.getElementById(divID).style.display='block';  
       }
}

这里 div 出现了,但不是慢动作。谁能帮忙??提前致谢

开发..

4

5 回答 5

4

这根本不需要 jQuery,它只是一个基本的我正在使用你的函数来解释它是如何完成的。

   function showDiv(divID)
   {
       if(document.getElementById(divID).style.display=='none')
       {
           document.getElementById(divID).style.display='block';  
       }
}

您的功能所做的基本上是从 BOX 模型中删除整个元素(块和无的切换完全从 BOX 模型中删除元素,因此它不占用任何空间或任何东西,但这可能/可能不会导致一些布局问题);

现在要以慢动作为它制作动画,您需要一个计时功能。

计时函数是一个简单的数学函数,它给出给定时间或取决于其他参数的属性值(在您的情况下为不透明度)。

除此之外,您还需要使用像 opacity 这样的属性来淡化它(Opacity 是一个 CSS 属性,它定义了元素及其子元素的透明度)

所以让我们从一个非常基本的显示/隐藏开始,在 JS 中使用 setTimeout 函数。

function getValue(t,dir){

  if( dir > 0){
   return 0.5*t; /* Y = mx + c  */
  }else{
   return 1-(0.5*t);
  }
  /* 
    Here the slope of line m = 0.5.
    t is the time interval.
  */
}


function animator(divID){
      if(!(this instanceof animator)) return new animator(divID); /* Ignore this */
  var Node = document.getElementById(divID),
      start = new Date.getTime(), // The initiation.
      now = 0,
      dir = 1,
      visible = true;
  function step( ){
    now = new Date.getTime();
    var val = getValue( now - start,dir)
    Node.style.opacity = val;
    if( dir > 0 && val > 1 || dir < 0 && val < 0 ){
      visible = !(visible*1);
      // Optionally here u can call the block & none 
      if( dir < 0 ) { /* Hiding  and hidden*/
        Node.style.display = 'none'; // So if were repositioning using position:relative; it will         support after hide 
      }
      /* Our animation is finished lets end the continous calls */
      return;
    }
    setTimeout(step,100); // Each step is executated in 100seconds
  }
  this.animate = function(){
    Node.style.display = 'block';
    dir *= -1;
    start = new Date.getTime();
    setTimeout(step,100);
  } 
}

现在您可以简单地调用该函数

  var magician = new animator('divName');

然后切换它的动画

  magician.animate();

现在使用计时功能,您可以创建任何您想要的可能性,如

  return t^2 / ( 2 *3.23423 );

甚至更高的多项式方程,如

  return t^3+6t^2-38t+12;

如您所见,我们的功能非常基本,但它解释了如何使用纯 js 制作动画的要点。您可以稍后使用 CSS3 模块进行动画并使用 javascript 触发这些类 :-)

或者也许在可用的情况下使用 CSS3 编写一个跨浏览器 polyfill(它更快),如果不是 JS :-) 希望有所帮助

于 2012-04-22T10:42:33.057 回答
3

跨浏览器解决方案(不带 jQuery):

HTML:

<div id="toChange" ></div>

CSS:

#toChange
{
    background-color:red;
    width:200px;
    height:200px;
    opacity:0;//IE9, Firefox, Chrome, Opera, and Safari
    filter:alpha(opacity=0);//IE8 and earlier
}

Javascript:

var elem=document.getElementById("toChange");
var x=0;

function moreVisible()
{
    if(x==1)clearInterval(t);
    x+=0.05;
    elem.style.opacity=x;
    elem.style.filter="alpha(opacity="+(x*100)+")";
}
var t=setInterval(moreVisible,25);

小提琴演示:http: //jsfiddle.net/JgxW6/1/

于 2012-04-22T09:30:50.360 回答
2

因此,您有一些 jQuery 答案,但如果您只想要淡化 div,我不推荐使用 jQuery

当然 jQuery 让事情变得更容易,但是对于一个简单的功能来说它是很多开销。

这是一个用纯 JS 做到的人:

在纯javascript中淡入淡出

还有一个 CSS3 示例:

如何使用 Javascript 触发 CSS3 淡入效果?

于 2012-04-22T09:29:15.957 回答
0

你可以使用 jquery $.show('slow') 来做同样的事情,如果你想在不使用 jquery 的情况下做同样的事情,那么你可能需要编写一些代码来自己显示效果,你可以看看 jquery's show 的源代码功能http://james.padolsey.com/jquery/#v=1.6.2&fn=show。或者,您也可以使用 fadein() 在 jquery 中淡入效果

于 2012-04-22T08:38:46.047 回答
-1

是的,您可以使用 Jquery 来完成。这是我的示例

$('#divID').click(function() {
   $('#book').show('slow', function() {
// Animation complete.
  });

});

详情请点击这里 谢谢。

于 2012-04-22T08:39:26.187 回答