30无缝轮播(最后一张的下一张是第一张)

主要是对状态机的理解
集体跳绳,之前是把几张图片看作一个整体处理,这里是一个个处理

*{margin: 0px;padding: 0px;}
*{box-sizing: border-box;}

.window{
    width: 400px;
    height: 300px;
    margin: 20px auto;
    overflow: hidden;
}

先初始化这些

.images{
    display: flex;
    position: relative;
}
.images>img{
    width:100%;
    transition: all 1s;
}
.images>img:nth-child(1){
    position: absolute;
    top: 0;
    left: 0;
   
}
.images>img:nth-child(2){
    position: absolute;
    top: 0;  
    left:100%;
}
.images>img:nth-child(3){
    position: absolute;
    top: 0; 
    left:100%; 
}
.images>img.right{
    position: absolute;
    top: 0; 
    left:100%; 
}

然后一张张的动,看看怎么样达到我们的目的

setTimeout(function(){
    $('.images>img:nth-child(1)').css({
        transform:'translateX(-100%)'
    })
    $('.images>img:nth-child(2)').css({
        transform:'translateX(-100%)'
    })
    $('.images>img:nth-child(1)').one('transitionend',function(e){
        $(e.currentTarget).addClass('right').css({transform:'none'})
    })

},3000)
setTimeout(function(){
    $('.images>img:nth-child(2)').css({
        transform:'translateX(-200%)'
    })
    $('.images>img:nth-child(3)').css({
        transform:'translateX(-100%)'
    })
    $('.images>img:nth-child(2)').one('transitionend',function(e){
        $(e.currentTarget).addClass('right').css({transform:'none'})
    })

},6000)

setTimeout(function(){
    $('.images>img:nth-child(3)').css({
        transform:'translateX(-200%)'
    })
    $('.images>img:nth-child(1)').css({
        transform:'translateX(-100%)'
    })
    $('.images>img:nth-child(3)').one('transitionend',function(e){
        $(e.currentTarget).addClass('right').css({transform:'none'})
    })

},9000)
setTimeout(function(){
    $('.images>img:nth-child(1)').css({
        transform:'translateX(-100%)'
    })
    $('.images>img:nth-child(2)').css({
        transform:'translateX(-100%)'
    })
    $('.images>img:nth-child(1)').one('transitionend',function(e){
        $(e.currentTarget).addClass('right').css({transform:'none'})
    })//动画结束后发生的事情,如果是on就算结束一次动画执行一次,one是只执行一次,这里最后1还是得回去显示的位置,所以每次就动一下
},12000)

进一步改进,此时每片图片有三种状态

$('.images>img:nth-child(1)').addClass('current')
$('.images>img:nth-child(2)').addClass('enter')
setTimeout(()=>{
  $('.images>img:nth-child(1)').removeClass('current').addClass('leave')
    .one('transitionend',(e)=>{
      $(e.currentTarget).removeClass('leave').addClass('enter')
    })
  $('.images>img:nth-child(2)').removeClass('enter').addClass('current')
},3000)

setTimeout(()=>{
  $('.images>img:nth-child(2)').removeClass('current').addClass('leave')
    .one('transitionend',(e)=>{
      $(e.currentTarget).removeClass('leave').addClass('enter')
    })
  $('.images>img:nth-child(3)').removeClass('enter').addClass('current')
},6000)

setTimeout(()=>{
  $('.images>img:nth-child(3)').removeClass('current').addClass('leave')
    .one('transitionend',(e)=>{
      $(e.currentTarget).removeClass('leave').addClass('enter')
    })
  $('.images>img:nth-child(1)').removeClass('enter').addClass('current')
},9000)

setTimeout(()=>{
  $('.images>img:nth-child(1)').removeClass('current').addClass('leave')
    .one('transitionend',(e)=>{
      $(e.currentTarget).removeClass('leave').addClass('enter')
    })
  $('.images>img:nth-child(2)').removeClass('enter').addClass('current')
},12000)

然后优化代码
注意

 $('.images>img:nth-child(n})')不可以,我们要的是数字,不会自动转换取里面的数字,所以用es6的插值法,写成下面的样子
  $(`.images>img:nth-child(${n}`)
$('.images>img:nth-child(1)').addClass('current')
$('.images>img:nth-child(2)').addClass('enter')
$('.images>img:nth-child(3)').addClass('enter')

let n=1
setInterval(()=>{
  $(`.images>img:nth-child(${x(n)})`).removeClass('current').addClass('leave')
    .one('transitionend',(e)=>{
      $(e.currentTarget).removeClass('leave').addClass('enter')
    })
  $(`.images>img:nth-child(${x(n+1)})`).removeClass('enter').addClass('current')
  n+=1
},3000)
function x(n){
  if(n>3){
    n=n%3
    if(n===0){
      n=3
    }
  }
  return n
}

然后封装成三个函数,三种间切换


image.png

接下来学习Dom,dom specs ,0到4版本,
DOMleval 1很简单,就是作个汇总,有二个版本,看我画红圈的第二个
我们学的是dom2


html
js二边都是函数

image.png

主要用2


对一个目标用onclick后面的掩盖前面的

对一个目标用addEventListener后面的不会掩盖前面的,按顺序执行

还可以从队列移除,移除了就不监听了

事件模型

事件模型

事件模型

看参数值定箭头,执行顺序是对于父子之类多个目标的垂直关系而言,那6个箭头谁先出现选谁先呈现
特殊情况:对一个目标用了二种参数,就是普通的像队列先后出现,先写哪个执行哪个,因为都写了还都执行

结果是儿子冒泡,儿子捕获
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 经常听一些同学说:不知道下一份工作该去哪类公司做些什么,我的职场人际一团糟老板不重视我,我现在成长的非常慢所以又想...
    我是大橙阅读 5,672评论 2 40
  • 第一部分 准入训练 第1章 进入忍者世界 js开发人员通常使用js库来实现通用和可重用的功能。这些库需要简单易用,...
    如201608阅读 5,169评论 1 2
  • 一首八月照相馆,让思绪回到了某年某月的某一天.... 路过的蜻蜓没有在听你的诉说,只是默默的飞过,幻想着自己是一只...
    iassac阅读 2,271评论 0 1
  • 为什么使用Kotlin 项目一期在收尾了终于有时间折腾了,一个多月以来Kotlin从入门到现在,坚持用来开发的切身...
    EitanLiu阅读 76,017评论 50 225
  • 多次思念的雪终于姗姗来迟,虽然下的不大,但也给这座小城带来了欢乐,点点雪花飘飘洒洒,给大地裹上了银装,周日,自己参...
    石成玉_d24e阅读 4,411评论 0 2

友情链接更多精彩内容