javascript - 手动幻灯片无法按预期工作

标签 javascript html css

我正在为本地蒙台梭利改造网页。我正在尝试使用手动幻灯片脚本,但是页面没有按预期工作。在不添加“onload”属性的情况下,幻灯片中的每个图像都会立即显示。经检查,我收到一条错误消息:“未捕获类型错误:无法读取未定义的属性‘样式’”。这是有问题的 HTML 部分:

<div class="slideshow-container">
  <div class="mySlides fade">
    <div class="numbertext">1 / 8</div>
      <img src="http://i.imgur.com/hOlkQyd.jpg" width = "800" height = "600"/>
      <div class="text">Caption One</div>
   </div>

   <div class="mySlides fade">
     <div class="numbertext">2 / 8</div>
     <img src="http://i.imgur.com/79juKeU.jpg" width = "800" height = "600"/>
     <div class="text">Caption Two</div>
   </div>

   <div class="mySlides fade">
     <div class="numbertext">3 / 8</div>
     <img src="http://i.imgur.com/54B3yvz.jpg" width = "800" height = "600"/>
     <div class="text">Caption Three</div>
   </div>

   <div class="mySlides fade">
     <div class="numbertext">4 / 8</div>
     <img src="http://i.imgur.com/zsvuaoU.jpg" width = "800" height = "600"/>
     <div class="text">Caption Four</div>
   </div>

   <div class="mySlides fade">
     <div class="numbertext">5 / 8</div>
     <img src="http://i.imgur.com/N2hgBtH.jpg" width = "800" height = "600"/>
     <div class="text">Caption Five</div>
   </div>

   <div class="mySlides fade">
     <div class="numbertext">6 / 8</div>
     <img src="http://i.imgur.com/McQHME4.jpg" width = "800" height = "600"/>
     <div class="text">Caption Six</div>
   </div>

   <div class="mySlides fade">
     <div class="numbertext">7 / 8</div>
     <img src="http://i.imgur.com/rOvbBlj.jpg" width = "800" height = "600"/>
     <div class="text">Caption Seven</div>
   </div>

   <div class="mySlides fade">
     <div class="numbertext">8 / 8</div>
     <img src="http://i.imgur.com/aX4kzGr.jpg" width = "800" height = "600"/>
     <div class="text">Caption Eight</div>
   </div>

   <a class="prev" onclick="plusSlides(-1)">&#10094;</a>
   <a class="next" onclick="plusSlides(1)">&#10095;</a>
 </div>

 <div style="text-align:center">
   <span class="dot active" onclick="currentSlide(1)"></span> 
   <span class="dot" onclick="currentSlide(2)"></span> 
   <span class="dot" onclick="currentSlide(3)"></span>
   <span class="dot" onclick="currentSlide(4)"></span> 
   <span class="dot" onclick="currentSlide(5)"></span> 
   <span class="dot" onclick="currentSlide(6)"></span> 
   <span class="dot" onclick="currentSlide(7)"></span> 
   <span class="dot" onclick="currentSlide(8)"></span>  
 </div>

这是脚本:

var slideIndex = 1;
showSlides(slideIndex);

function plusSlides(n)
{
    showSlides(slideIndex += n);
}

function currentSlide(n)
{
    showSlides(slideIndex = n);
}

function showSlides(n)
{
    var i;
    var slides = document.getElementsByClassName("mySlides");
    var dots = document.getElementsByClassName("dot");
    if (n > slides.length) {slideIndex = 1;} 
    if (n < 1) {slideIndex = slides.length;}
    for (i = 0; i < slides.length; i++)
    {
        slides[i].style.display = "none"; 
    }
    for (i = 0; i < dots.length; i++)
    {
        dots[i].className = dots[i].className.replace(" active", "");
    }
    slides[slideIndex-1].style.display = "block"; /*Error appears here */
    dots[slideIndex-1].className += " active";
}

我做错了什么?

最佳答案

slides[slideIndex-1].style.display = "block"; /*Error appears here */

slides[slideIndex-1] 未定义的原因是 slideIndex - 1 超出了 slides 的范围。最可能的原因是 slides空的。如果您在页面内容之前而不是之后运行脚本,则可能会发生这种情况。这将导致此行使 slides 长度为零,因为还没有 any 类名称为 mySlides 的元素:

var slides = document.getElementsByClassName("mySlides");

在幻灯片内容之后移动您的脚本标签应该可以解决问题,或者在 onload 处理程序中移动 showSlides(slideIndex) 调用。

关于javascript - 手动幻灯片无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38285826/

相关文章:

javascript - 无法读取 null 的属性 'parentNode'。我在控制台中遇到错误

javascript - Angular 窗口注入(inject)

html - 从内部更改 iFrame 属性和 CSS

javascript - 如何使用 javascript 和 CSS 创建模态弹出窗口

html - 使用 Div 标签在 CSS 中组织 HTML 元素——我在为某些类实现字体时哪里出错了?

html - 具有不同编号样式的 TinyMce 嵌套有序列表十进制编号

javascript - 在 Laravel 中使用 Ajax 保存路径图像

javascript - Angular 填充输入字段

javascript - 根据元素加载不同的图库 slider

html - 我可以让浏览器窗口从页面底部开始吗?