特点:
1,无论点击多快,都保持了跑马灯的动画效果。
2,无论点击多块,都能够保持圆形旋转效果不间断。
3,无论点击多快,都能够保持了移动距离的准确性。
疑惑:
1,据我观察,代码应该是动态的根据点击的频率改变了动画执行的帧率。
2,我自己写圆形旋转跑马灯效果是要添加多余的元素标签的,如下代码中的第一个li和最后一个li元素,但是apple的代码中并没有这样多余的元素,那么是如何实现这种效果的呢?从最后一张到第一张的无缝切换。
3,动画效果的整体性,据我观察无论你之前点击滑动多少次,点击有多块,它最后一次执行的动画效果都是正常的点击一次的效果。
求大神解惑。。。
不知道这算不算伸手党...(哭笑不得.jpg)
观摩地址:www.apple.com
<div class='box'>
<ul class='list'>
<li class='item'> <img src='images/img4.jpg'/> </li>
<li class='item'> <img src='images/img1.jpg'/> </li>
<li class='item'> <img src='images/img2.jpg'/> </li>
<li class='item'> <img src='images/img3.jpg'/> </li>
<li class='item'> <img src='images/img4.jpg'/> </li>
<li class='item'> <img src='images/img1.jpg'/> </li>
</ul>
</div>
给个简单的 demo,懒得实现循环了(也就是说从最右到最左的切换是从右向左而不是 apple 那样从左往右)
https://bumfo.github.io/transition.html
<!DOCTYPE html>
<title>Transition</title>
<style>
html {
font: 16px sans-serif;
}
article {
width: 500px;
overflow: hidden;
}
div {
width: 2500px;
transform: translate3d(0px, 0px, 0px);
transition: transform ease 1s;
}
section {
width: 500px;
height: 100px;
float: left;
padding: 15px;
border: 1px solid #ddd;
box-sizing: border-box;
}
</style>
<article>
<div id="div">
<section>1</section>
<section>2</section>
<section>3</section>
<section>4</section>
<section>5</section>
</div>
</article>
<button onclick="prev()">prev</button>
<button onclick="next()">next</button>
<script>
let total = 5;
let width = 500;
let index = 0;
let divDom = document.querySelector('#div');
function tranformScroll() {
let x = -index * width;
divDom.style.transform = 'translate3d(' + x + 'px, 0px, 0px)';
}
function normalizeIndex() {
index = (total + index % total) % total;
}
function prev() {
--index;
normalizeIndex();
tranformScroll();
}
function next() {
++index;
normalizeIndex();
tranformScroll();
}
</script>
谢邀
这还不简单
传统的思路是点一次切换一次,一旦加入过渡,就会出现题主所想的一系列问题
新的思路是 ViewModel 和 View 分开
点一次,ViewModel 中的当前页面切换一次。
过渡是从旧页面直接切换到当前页面,而不是一个一个切换
自然就可以满足那几个条件
以上
补充一下,那个循环切换的效果并不完美,会出现闪烁,说明浏览器进行了缓慢的 layout
可以推测是每次页面滚到头,都会把最左侧的一系列页面挪到右边