美文网首页
30无缝轮播(最后一张的下一张是第一张)

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

作者: Lichee_3be1 | 来源:发表于2018-04-27 22:29 被阅读0次

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

*{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个箭头谁先出现选谁先呈现
特殊情况:对一个目标用了二种参数,就是普通的像队列先后出现,先写哪个执行哪个,因为都写了还都执行

结果是儿子冒泡,儿子捕获

相关文章

  • task31 进阶:把轮播改成无缝轮播吧

    1. 无缝的轮播怎么做 什么是无缝轮播? 从第一张到倒数第二张图片还好,但是从最后一张图片到第一张图片就有问题了,...

  • 轮播新需求

    需求:实现一个有按钮的无缝自动轮播方案:克隆第一张和最后一张,第一张克隆元素放在最后一张后边,最后一张克隆元素放在...

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

    主要是对状态机的理解集体跳绳,之前是把几张图片看作一个整体处理,这里是一个个处理 先初始化这些 然后一张张的动,看...

  • 随笔的一些小技巧

    1,轮播图在到达最后一张后返回第一张

  • UIScrollView无缝衔接广告轮播

    思路 为了实现广告轮播页首尾无缝衔接,我们要在创建完原有图片的基础上在第一张图片前面创建imageView显示最后...

  • 新、旧轮播图

    传统轮播苹果风格无缝轮播 旧版思路: 使用排队思维实现,即多人跳大绳思维,当前第一张离开后,立即进入轮播区的等进入...

  • objective-c实现轮播图(17-08-09)

    注:轮播图是7张,但要给8张图片,并且第一张和最后一张是同一张图片

  • 进阶17-轮播实现

    1.轮播原理: 将图片排成一行,隐藏超出范围的图片,在第一张图片前添加1最后一张图片,在最后一张图片后添加第一张图...

  • jQuery轮播图

    需求:使图片能够进行轮播滚动,到最后一张图片时返回第一张(或第一张向前到最后一张)。思路:在两端的图片前后添加一个...

  • jQuery轮播图

    需求:使图片能够进行轮播滚动,到最后一张图片时返回第一张(或第一张向前到最后一张)。思路:在两端的图片前后添加一个...

网友评论

      本文标题:30无缝轮播(最后一张的下一张是第一张)

      本文链接:https://www.haomeiwen.com/subject/hebulftx.html