[英]Remove css animation no working
我正在尝试使用JavaScript创建滑动轮播。 除了要返回幻灯片时,其他所有功能都适用。 在下面的示例中,如果您位于“第二”,然后单击“第一”,则没有动画,并且直接转到“第一”。 当我检入开发工具时,我看到了实际的CSS动画(即CSS transition
)。
我认为问题是,它跳过了第19行的代码:
sliderInnerWrapper.style.transform = 'translateX(-50%)';
并在第25行应用一个:
sliderInnerWrapper.style.transform = 'translateX(' + translateXamount + '%)';
我希望它去translateX(-50%)
然后动画到translateX(0)
。 我该如何实现?
如果您有更好,更有效的方式制作滑动轮播,请发布该信息。
var sliderInnerWrapper = document.getElementById('sliderInnerWrapper'), sliders = document.getElementsByClassName('slider'), arrows = document.getElementsByClassName('arrows'), currentSelectedTabContent = sliders[0], previousSelectedTabContent = currentSelectedTabContent; previousSelectedTabContent.style.display = 'block'; var tabChange = function(tab) { var selectedIndex = indexInClass(arrows, tab.path[0]), translateXamount; currentSelectedTabContent = sliders[selectedIndex]; currentSelectedTabContent.style.display = 'block'; if (selectedIndex < indexInClass(sliders, previousSelectedTabContent)) { translateXamount = 0; sliderInnerWrapper.style.transform = 'translateX(-50%)'; } else { translateXamount = -50 } sliderInnerWrapper.style.transition = 'transform 2.5s cubic-bezier(0.22, 0.61, 0.36, 1)'; sliderInnerWrapper.style.transform = 'translateX(' + translateXamount + '%)'; }, tabContentAnimationCallback = function() { sliderInnerWrapper.style.transition = 'none'; sliderInnerWrapper.style.transform = 'translateX(0)'; previousSelectedTabContent.style.display = 'none'; previousSelectedTabContent = currentSelectedTabContent; }; for (var i = 0; i < arrows.length; i++) { arrows[i].addEventListener('change', function(e) { tabChange(e); }); } sliderInnerWrapper.addEventListener('transitionend', tabContentAnimationCallback); function indexInClass(collection, node) { for (var i = 0; i < collection.length; i++) { if (collection[i] === node) return i; } return -1; }
#sliderOuterWrapper { width: 300px; /* overflow: hidden; Enenturally*/ } #sliderInnerWrapper { display: flex; align-items: flex-start; width: 600px; } .slider { width: 300px; height: 150px; display: none; } .arrows { display: inline-block; }
<div id="sliderOuterWrapper"> <div id="sliderInnerWrapper"> <div class="slider" style="background-color: green;"></div> <div class="slider" style="background-color: orange;"></div> <div class="slider" style="background-color: purple"></div> <div class="slider" style="background-color: cadetblue"></div> </div> </div> <div id="arrowWrapper"> <input type="radio" name="tabSliderGroup" checked="true" class="arrows" />First <input type="radio" name="tabSliderGroup" class="arrows" />Second <input type="radio" name="tabSliderGroup" class="arrows" />Third <input type="radio" name="tabSliderGroup" class="arrows" />Fourth </div>
我只是意识到,如果第25行仅从第一到第二执行,而不是从第二到第一执行,那么sliderInnerWrapper
动画sliderInnerWrapper
将为-50%。 如何使它不动画到-50%
?
过时的CodePen
http://codepen.io/zer00ne/pen/MKrMdr/?editors=0110
我想我已经解决了,但是transition: bezier
使行为变得怪异但有点酷(从未见过滑块如此操作)。 无论如何,这次肯定可以在Chrome和Firefox PC中使用。 功能正常但并不完全稳定; 如果快速连续单击“箭头:”,则最终会在与预期不同的幻灯片上结束。我将视线错误归咎于过渡时间,因此请尝试调整得更快一些。以下是我更改了零件。我相信麻烦来自未声明flex-wrap: nowrap
#sliderInnerWrapper
flex-wrap: nowrap
。
#sliderOuterWrapper {
width: 300px;
overflow: hidden;
}
#sliderInnerWrapper {
display: flex;
flex-flow: row nowrap;
justify-content: flex-start;
width: 600px;
}
currentSelectedTabContent.style.display = "block";
//currentSelectedTabContent.style.visibility = "visible";
if (selectedIndex < indexInClass(sliders, previousSelectedTabContent)) {
translateXamount = -100;
sliderInnerWrapper.style.transform = 'translateX(-50%)';
} else {
translateXamount = -50;
}
我将事件change
为click
。 在您unfocus
或blur
之前,事件change
不会执行任何操作。 我猜想Firefox change
按规范来处理change
,而Chrome有点流氓说:“拧紧它!我知道您真正想做的事。”无论如何,已经在Chrome和Firefox PC上进行了测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.