You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery自动轮播迁移本地后无显示无报错问题排查

问题描述

将Codepen上的一款jQuery自动轮播组件迁移到本地后,页面无法显示轮播内容,控制台无报错,已验证main.js可正常加载(通过console.log($current)确认)。相关代码如下:

HTML头部代码

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="main.css" />
    <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/velocity/1.1.0/velocity.min.js"></script>
    <script src="main.js"></script>
</head>

HTML主体代码

<body>
<div class="slider--teams">
    <div class="slider--teams__team">
      <ul id="list" class="cf">
        <li>
          <figure class="active">
            <figcaption>
              <img src="https://odium.kr/assets/css/images/symbol-cernium.png">
              <h2>Billie</h2>
              <p>Head of Team</p>
            </figcaption>
          </figure>
        </li>

        <li>
          <figure>
            <figcaption>
              <img src="https://odium.kr/assets/css/images/symbol-arcus.png">
              <h2>Roger</h2>
              <p>Art Director</p>
            </figcaption>
          </figure>
        </li>

        <li>
          <figure>
            <figcaption>
              <img src="https://odium.kr/assets/css/images/symbol-odium.png">
              <h2>Wendy</h2>
              <p>Designer</p>
            </figcaption>
          </figure>
        </li>  
      </ul>
    </div>
  </div>
</body>

main.js代码

var sliderTeam = (function(document, $) {
  
    'use strict';
    
    var $sliderTeams = $('.slider--teams'),
        $list = $('#list'),
        $listItems = $('#list li'),
        $nItems = $listItems.length,
        $nView = 3,
        autoSlider,
        $current = 0,
        $isAuto = true,
        $acAuto = 2500,
        
        _init = function() {
          _initWidth();
          _eventInit();
        },
        
        _initWidth = function() {
          $list.css({
            'margin-left': ~~(100 / $nView) + '%',
            'width': ~~(100 * ($nItems / $nView)) + '%'
          });
          $listItems.css('width', 100 / $nItems + '%');
          $sliderTeams.velocity({ opacity: 1 }, { display: "block" }, { delay:1000 });
        },
        
        _eventInit = function() {
          
          window.requestAnimFrame = (function() {
            return  window.requestAnimationFrame       || 
                window.webkitRequestAnimationFrame || 
                window.mozRequestAnimationFrame    || 
                window.oRequestAnimationFrame      || 
                window.msRequestAnimationFrame     || 
                function(callback, element){
                  window.setTimeout(callback, 1000 / 60);
                };
          })();
  
          window.requestInterval = function(fn, delay) {
              if( !window.requestAnimationFrame       && 
                  !window.webkitRequestAnimationFrame && 
                  !window.mozRequestAnimationFrame    && 
                  !window.oRequestAnimationFrame      && 
                  !window.msRequestAnimationFrame)
                      return window.setInterval(fn, delay);
              var start = new Date().getTime(),
              handle = new Object();
  
              function loop() {
                  var current = new Date().getTime(),
                  delta = current - start;
                  if(delta >= delay) {
                      fn.call();
                      start = new Date().getTime();
                  }
                  handle.value = requestAnimFrame(loop);
              };
              handle.value = requestAnimFrame(loop);
              return handle;
          }
  
          window.clearRequestInterval = function(handle) {
              window.cancelAnimationFrame ? window.cancelAnimationFrame(handle.value) :
              window.webkitCancelRequestAnimationFrame ? window.webkitCancelRequestAnimationFrame(handle.value)   :
              window.mozCancelRequestAnimationFrame ? window.mozCancelRequestAnimationFrame(handle.value) :
              window.oCancelRequestAnimationFrame ? window.oCancelRequestAnimationFrame(handle.value) :
              window.msCancelRequestAnimationFrame ? msCancelRequestAnimationFrame(handle.value) :
              clearInterval(handle);
          };
          
          $.each($listItems, function(i) {
            var $this = $(this);
            $this.on('touchstart click', function(e) {
              e.preventDefault();
              _stopMove(i);
              _moveIt($this, i);
            });
          });
          
          autoSlider = requestInterval(_autoMove, $acAuto);
        },
        
        _moveIt = function(obj, x) {
          
          var n = x;
          
          obj.find('figure').addClass('active');        
          $listItems.not(obj).find('figure').removeClass('active');
          
          $list.velocity({
            translateX: ~~((-(100 / $nItems)) * n) + '%',
            translateZ: 0
          }, {
            duration: 1000,
            easing: [400, 26],
            queue: false
          });
          
        },
        
        _autoMove = function(currentSlide) {
          if ($isAuto) { 
            $current = ~~(($current + 1) % $nItems);
          } else {
            $current = currentSlide;
          }
          console.log($current);
          _moveIt($listItems.eq($current), $current);
        },
        
        _stopMove = function(x) {
          clearRequestInterval(autoSlider);
          $isAuto = false;
          _autoMove(x);
        };
    
    return {
      init: _init
    };
  
  })(document, jQuery);
  
  $(window).load(function(){
    'use strict';
    sliderTeam.init();
  });
问题排查与解决方案

1. 缺失核心CSS样式

原Codepen的轮播依赖特定布局样式,本地main.css未同步这些样式,导致元素无法正常渲染。需添加以下代码到main.css:

/* 清除浮动类 */
.cf:before,
.cf:after {
    content: " ";
    display: table;
}
.cf:after {
    clear: both;
}

/* 轮播容器基础样式 */
.slider--teams {
    opacity: 0;
    display: none;
    overflow: hidden;
    width: 100%;
}

.slider--teams__team {
    overflow: hidden;
    position: relative;
    width: 100%;
}

/* 列表项布局 */
#list {
    list-style: none;
    margin: 0;
    padding: 0;
    position: relative;
}

#list li {
    float: left;
    position: relative;
}

/* 内容样式 */
#list figure {
    margin: 0;
    padding: 0;
    text-align: center;
}

#list figcaption {
    padding: 1em;
}

#list img {
    display: inline-block;
    max-width: 100px;
    height: auto;
}

2. jQuery引入协议问题

本地用file://协议打开页面时,//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js会以file://协议加载,导致失败。需修改为HTTPS协议:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>

3. Velocity.js调用参数错误

_initWidth方法中Velocity的调用格式错误,Velocity仅接受两个参数(属性对象、配置对象),需合并配置项:

// 原代码
$sliderTeams.velocity({ opacity: 1 }, { display: "block" }, { delay:1000 });

// 修改后
$sliderTeams.velocity({ opacity: 1 }, { display: "block", delay: 1000 });

4. 补充说明

  • 若仍无法显示,可检查浏览器控制台的网络请求,确认图片、CSS、JS资源是否加载成功;
  • 原Codepen中可能包含额外的全局样式(如* { box-sizing: border-box; }),建议添加到main.css以保证布局一致性。

内容的提问来源于stack exchange,提问作者mmd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 00:18:00