阅读纯JavaScript的更多链接

kni*_*ght 6 html javascript css fadein

我正在尝试创建一个简单的Read More示例.它由一个段落和一个按钮组成,段落的一半用span标记括起来,最初设置为隐藏.当用户单击"阅读更多"按钮时,将显示隐藏的跨度.我有工作代码,但只是希望像JQuery一样淡化效果,但使用纯Javascript.有人请帮忙.

var span = document.getElementsByTagName('span')[0];
var hideshow = document.getElementById('hideshow');

span.style.display = 'none';

hideshow.onclick = function() {
  span.style.display = 'block';
};
Run Code Online (Sandbox Code Playgroud)
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsa maiores dolore earum ducimus molestiae, aut. <span>Quisquam consequuntur, maiores et, doloremque atque provident similique consequatur totam voluptas vitae veniam, molestiae laborum.</span></p>

<button id="hideshow">Read More</button>
Run Code Online (Sandbox Code Playgroud)

Jos*_*ier 5

一种方法是使用CSS3过渡以转换元素的不透明度.

在下面的示例中,单击按钮时会将类fade-in添加到子span元素.

var button = document.querySelector('.read-more');

button.addEventListener('click', function(event) {
  var span = event.target.previousElementSibling.querySelector('span');
  span.classList.add('fade-in');
});
Run Code Online (Sandbox Code Playgroud)
.show-more span {
  display: inline-block;
  height: 0;
  overflow: hidden;
  transition: opacity 2s;
  opacity: 0;
}
.show-more span.fade-in {
  height: auto;
  opacity: 1;
}
Run Code Online (Sandbox Code Playgroud)
<p class="show-more">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsa maiores dolore earum ducimus molestiae, aut. <span>Quisquam consequuntur, maiores et, doloremque atque provident similique consequatur totam voluptas vitae veniam, molestiae laborum.</span></p>
<button class="read-more">Read More</button>
Run Code Online (Sandbox Code Playgroud)

如果您想要一种适用于多个元素的方法,您还可以使用以下方法:

var buttons = document.querySelectorAll('.read-more');

for (var i = 0; i < buttons.length; i++) {
  buttons[i].addEventListener('click', function(event) {
    var span = event.target.previousElementSibling.querySelector('span');
    span.classList.add('fade-in');
  });
}
Run Code Online (Sandbox Code Playgroud)
.show-more span {
  display: inline-block;
  height: 0;
  overflow: hidden;
  transition: opacity 2s;
  opacity: 0;
}
.show-more span.fade-in {
  height: auto;
  opacity: 1;
}
Run Code Online (Sandbox Code Playgroud)
<p class="show-more">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsa maiores dolore earum ducimus molestiae, aut. <span>Quisquam consequuntur, maiores et, doloremque atque provident similique consequatur totam voluptas vitae veniam, molestiae laborum.</span></p>
<button class="read-more">Read More</button>

<p class="show-more">Another shorter paragraph. <span>Quisquam consequuntur, maiores et, doloremque atque provident similique consequatur totam voluptas vitae veniam, molestiae laborum.</span></p>
<button class="read-more">Read More</button>
Run Code Online (Sandbox Code Playgroud)


Dan*_*nce 4

从这里开始

span.style.opacity = 0;
Run Code Online (Sandbox Code Playgroud)

您需要逐渐将不透明度过渡到此处。

span.style.opacity = 1;
Run Code Online (Sandbox Code Playgroud)

您需要使用异步构造 ( // setTimeout)setInterval进行requestAnimationFrame迭代,因为同步构造 ( while// / ) 会阻塞主线程,从而阻止浏览器实际渲染具有更新的不透明度的元素。forfor-inforEach

function fadeIn(element) {

  function transition() {
    if(element.style.opacity < 1) {
      requestAnimationFrame(transition);
      element.style.opacity = Number(element.style.opacity) + 0.05;
    }
  }

  transition();
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您愿意使用 CSS(而不是纯 JS),您可以使用类和转换来实现此目的。

.out {
  opacity: 0;
  transition-duration: 0.5s;
}

.in {
  opacity: 1;
  transition-duration: 0.5s;
}
Run Code Online (Sandbox Code Playgroud)

确保元素out在到达 DOM 时具有该类,然后当您准备好淡入时,将其交换为该类in,浏览器将为您处理动画。