【发布时间】:2018-09-10 14:18:34
【问题描述】:
我关注this article 的垂直滑动卡片滑块。
这个问题有两个部分。
1.我不明白如何在向下滑动时反转滑块的方向?
这里是相关的codepen - https://codepen.io/bmarcelino/pen/vRYPXV
更新卡片的相关功能
function updateUi() {
requestAnimationFrame(function(){
elTrans = 0;
var elZindex = 5;
var elScale = 1;
var elOpac = 1;
var elTransTop = items;
var elTransInc = elementsMargin;
for(i = currentPosition; i < (currentPosition + items); i++){
if(listElNodesObj[i]){
listElNodesObj[i].classList.add('stackedcards-bottom', 'stackedcards--animatable', 'stackedcards-origin-bottom');
listElNodesObj[i].style.transform ='scale(' + elScale + ') translateX(0) translateY(' + (elTrans - elTransInc) + 'px) translateZ(0)';
listElNodesObj[i].style.webkitTransform ='scale(' + elScale + ') translateX(0) translateY(' + (elTrans - elTransInc) + 'px) translateZ(0)';
listElNodesObj[i].style.opacity = elOpac;
listElNodesObj[i].style.display = 'block';
listElNodesObj[i].style.zIndex = elZindex;
elScale = elScale - 0.04;
elOpac = elOpac - (1 / items);
elZindex--;
}
}
});
};
我不是特别精通 Javascript。
到目前为止,滑动时滑块仅向一个方向移动 - 向前。我希望了解将向后移动添加到滑块的实现。
2。关于性能
另外,requestAnimationFrame 确实有助于在滑动时提供流畅的体验。但是 DOM 中应该有多少张卡片有限制吗?我将调用 API 服务来获取内容,因为它会返回媒体,所以简单地将不透明度设置为 0 是否有助于减少内存使用?
作者认为删除 DOM 会迫使浏览器重新绘制,这会严重影响性能吗?但那不是虚拟列表吗?这种场景下的性价比是多少?
【问题讨论】:
-
你的意思是,你想添加底部按钮,点击 div 应该到底部?
-
没有。刷掉的卡片应该重新添加到滑块中。
-
作者忘记在他们的
onSwipe*()函数之后调用resetOverlays();。一旦添加了这些,卡片就会在堆后面重置。 -
叠加是可选的。我不会添加那个。事实上,那是不必要的 DOM。但是,如果您正在谈论“重置”卡片,那么理想情况下应该在所有卡片都被刷掉时发生。或者可能是如果滑块在循环。我的主要焦点是在滑块中向后移动,因为我们只能向前移动。
-
关于性能:对您不想显示的卡片使用
visibility: hidden;或display:none;css 属性。这将节省浏览器的渲染工作。不同之处在于,如果您通过可见性进行控制 - 浏览器将为元素保留空间,但不会渲染它。使用display:none浏览器将完全跳过元素渲染
标签: javascript performance css css-transforms