使用纯Javascript按钮文本转换

时间:2016-12-26 04:55:22

标签: javascript transition

我有使用纯javascript制作的淡入功能,因为site显示。

function fadeIn(el) {
  var opacity = 0;

  el.style.opacity = 0;
  el.style.filter = '';

  var last = +new Date();
  var tick = function() {
    opacity += (new Date() - last) / 400;
    el.style.opacity = opacity;
    el.style.filter = 'alpha(opacity=' + (100 * opacity)|0 + ')';

    last = +new Date();

    if (opacity < 1) {
      (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);
    }
  };

  tick();
}

我需要的是在更改按钮文本时应用此转换,例如:

var firstChild = document.getElementById('my-button').firstChild;
firstChild.data = 'Another text';
fadeIn(firstChild);

当然这不会按预期工作,但我想要一些东西来实现一种行为,即在更改文本上,过渡淡出仅触发文本而不是整个按钮。

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

要更改文字颜色,使用此功能,您可以使用RGBA设置颜色 - A代表Alpha通道。

所以,像这样:

el.style.color = "rgba(0,0,0, "+ OPACITY +")" // Opacity is 0 - 1

您还可以使代码更加模块化,允许您使用此淡入淡出功能编辑任何样式属性。

function fadeIn(el,prop,color) {
  var opacity = 0;

  el.style[prop] = 0;

  var last = +new Date();
  var tick = function() {
    opacity += (new Date() - last) / 400;
    el.style[prop] = "rgba("+color+","+opacity+")";

    last = +new Date();

    if (opacity < 1) {
      (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);
    }
  };

  tick();
}

现在你可以做到这两点:

fadeIn(firstChild,"background", "255,0,0"); // fade in background to red
fadeIn(firstChild,"color", "0,0,0"); // fade in text to black

答案 1 :(得分:1)

由于您使用的是firstChild,我假设您的文本位于button元素的子元素内,如果是这种情况,则可以使用。

点击底部的蓝色“运行代码段”按钮,查看其实际效果。

btn.addEventListener('click', function(){fadeOut(this.firstChild, newText)});

var newText = "World!";

function fadeOut(e, nT) {
 o=1; 
 t=setInterval(function () {
  if(o <= 0.1){
   clearInterval(t);
   e.style.filter = "alpha(opacity=0)";
    if(nT != undefined) {
     e.innerHTML = nT;
     fadeIn(e);
    }  
 }
  e.style.opacity = o;
  e.style.filter = 'alpha(opacity='+o*100+")";
  o-=o*0.05;
 }, 10);
}

function fadeIn(e) {
 o=0; 
 t=setInterval(function () {
  if(o >= 0.9){
   clearInterval(t);
   e.style.filter = "alpha(opacity=1)";
  }
   e.style.opacity = o;
   e.style.filter = 'alpha(opacity='+o*100+")";
   o+=0.05;
 }, 25);
}
#btn {
  color: Black;
  width: 100px;
  border: 1px solid black;
}
<button id="btn"><p>hello</p></button>