0
jQuery를 사용하지 않고 기본 slideToggle 효과를 만들려고합니다. 현재 콘텐츠를 위아래로 슬라이드 할 수 있지만 너무 빠르게 클릭하면 콘텐츠가 계속 다운됩니다.Javascript - Buggy slideToggle 효과 (jQuery 없음)
자바 스크립트 애니메이션을 처음 만들고 제작하는 것이므로 코드를 개선하기 위해 무엇을 할 수 있는지 알려 주시기 바랍니다.
또한 간격을 1로 설정했지만 애니메이션이 여전히 느립니다. 속도 향상에 대한 권장 사항은 무엇입니까? 어떤 도움을 크게 감상 할 수 http://jsfiddle.net/nfKTb/3/
function cL(element) {
console.log(element);
}
function setMinHeight(element) {
var yourTarget = document.querySelectorAll(element),
minHeight = 49;
for (var i = 0; i < yourTarget.length; i++) {
//cL(yourTarget[i].offsetHeight);
if (yourTarget[i].offsetHeight > minHeight) {
var targetExpanded = yourTarget[i];
var realHeight = targetExpanded.offsetHeight;
yourTarget[i].style.height = minHeight + 'px'; // Sets minHeight for expaned ul when loaded
}
}
targetExpanded.addEventListener('click', function(e) {
e.preventDefault();
var $this = this;
function slideDown() {
$this.style.height = minHeight + 'px';
minHeight++;
if (minHeight >= realHeight) {
clearInterval(slideDownTimer);
}
}
function slideUp() {
$this.style.height = minHeight + 'px';
minHeight--;
if (minHeight <= 49) {
clearInterval(slideUpTimer);
}
}
if (minHeight < realHeight) {
slideDownTimer = setInterval(slideDown, 1);
} else if (minHeight == realHeight) {
slideUpTimer = setInterval(slideUp, 1);
}
});
}
setMinHeight('.dd');
:
내가 데모 용으로 만든 jsFiddle에서 참조하시기 바랍니다. 나는 지금 9 시간 동안 똑바로되었습니다. :)
굉장합니다, 감사합니다! 간단하면서도 훌륭한 솔루션입니다. 하나의 질문 : $ this.style.height = 58.0 + 'px'를 추가했습니다. if() 문 안에 왜 그런가? – Shivam
오, 방금 속도가 50이고 요소 높이가 58 인 경우와 같이 오버플로 문제를 피하기 위해 질문을 보았습니다. 슬라이드의 다음 반복에서 -42로 이동하면 58로 되돌아갑니다. 그리고 슬라이드 위 (높이 위)에 대해서도, 위의 증가분을 할당 위로 이동하고 할당을 다음과 같이 변경하여 더 나은 방법으로 처리 할 수 있습니다 :'$ this.style.height = ((minHeight <58.0)? 58.0 : minHeight) + 'px'; 그러면 더 이상 그 라인이 필요 없습니다. 슬라이드를 아래로 똑같이 적용하십시오. – CME64
오, 알겠습니다.이 모든 도움에 다시 한번 감사드립니다! – Shivam