• html 高性能 简易轮播图


    目标

    实现简易轮播图动画效果
    设计理念

    • 无论有多少个轮播图,仅使用常数个轮播图tab,通过js替换更新dom内容,实现性能优化;
    • 使用bfc避免回流,(重绘是基本上无法避免,不在考虑);
    • 使用transform实现动画调用GPU加速。

    注意:以下代码仅仅实现简易轮播效果,具体场景需要具体分析。

    效果

    请添加图片描述

    代码

    
    <div class="wrap" id="wrap">
    div>
    
    <script>
    
    //测试显示元素
      const showList=[
        '1','2','3','4'
      ]
    
      function createElement(){
        const show=document.createElement('div')
        show.classList.add('box')
        show.classList.add('hide')
        return show
      }
      function getShow(){
        let index=-1
        return function (){
          ++index
          index%=showList.length
          return showList[index]
        }
      }
      const getData=getShow()
      
      // 使用fragment 将多个dom一次性添加 提高性能
      const fragment=document.createDocumentFragment()
      let dom1=createElement()
      dom1.innerText=getData()
      dom1.classList.replace('hide','show')
      let dom2=createElement()
      fragment.appendChild(dom1)
      fragment.appendChild(dom2)
      document.getElementById('wrap').appendChild(fragment)
    //切换代码
      function next() {
        dom1.classList.replace('show','hide')
        // 实现内容更迭 这里仅仅是设置文本 
        dom2.innerText=getData()
        dom2.classList.replace('hide','show')
    	
    	//交换 使 dom1始终是下一个将要隐藏元素
    	//交换 使 dom2始终是下一个将要显示元素
        let temp=dom1
        dom1=dom2
        dom2=temp
      }
    
      setInterval(next,1500)
    
    
    script>
    
    
    <style>
      @keyframes show {
        from{
          transform: translateX(100%);
        }
        to{
          transform: translateX(0);
        }
      }
      @keyframes hide {
        from{
          transform: translateX(0);
        }
        to{
          transform: translateX(-100%);
        }
      }
    
      .wrap {
        height: 200px;
        width: 500px;
        background: #4671ff;
        position: relative;
        
        /* bfc 使之不影响其他元素布局 不会引起回流 */
        overflow: hidden;
      }
    
      .wrap .box{
        height: 100%;
        width: 100%;
        background: #730e0e;
        position: absolute;
        top: 0;
        left: 0;
        display: flex;
        justify-content: center;
        align-items: center;
        font-size: 50px;
        color: white;
      }
      .show{
        animation: show .8s;
      }
    
      .hide{
        animation: hide .8s;
       
        /* 动画完成后隐藏到右边 */
        transform: translateX(100%);
      }
    style>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
  • 相关阅读:
    模型剪枝算法——L1正则化BN层的γ因子
    The 2021 CCPC Weihai Onsite(vp补题记录,A,J,D,G)
    DVWA靶场环境搭建_SQL注入模拟靶机
    流量录制与回放在vivo的落地实践
    第十八天笔记
    No.11软件工程的过程管理
    Java PipedOutputStream类简介说明
    Linux查看日志比较实用的几个命令
    python的opencv操作记录(八)——小波变换
    Linux常用命令(上).
  • 原文地址:https://blog.csdn.net/TY_GYY/article/details/133551001