当我添加点击事件时,我的 javascript 函数会重复运行(?)

2024-04-03

免责声明:我正在尝试学习javascript。我不是一个聪明人。

所以,我做了一个 Jquery 图像滑块。我很自豪。有用。它加载图像,并日复一日地逐个显示它们。生活过得很好。

然后我想为滑块添加导航,黑暗降临在我的小王国上。

当我单击其中一个按钮时,我会调用 LoadSlide 函数并传递适当的索引LoadSlide(NewIndex)。然后它运行该函数,但它也继续使用标准运行该函数LoadSlide(index+1)争论。因此,无需单击任何按钮,它就会像这样运行:

slide1 -> (6500ms) -> slide2 -> (6500ms) -> slide3 -> (6500ms) -> slide1 ...

然后我单击一个按钮(幻灯片 2),另一个循环同时开始:

slide1 -> (6500ms) -> slide2 -> (6500ms) -> slide3 -> (6500ms) -> slide1 ...
   [click] slide2 -> (6500ms) -> slide3 -> (6500ms) -> slide1 -> (6500ms)...

请各位传说的守护者们多多指教。如果这条龙被杀死,你将享受许多少女和无尽的麦酒。

可怜的代码在这里:http://jsfiddle.net/V6svT/2/ http://jsfiddle.net/V6svT/2/


您遇到的问题是动画时间和点击触发器之间的同步。 此外,当用户单击按钮时,您不会取消下一个计划的操作。 假设我们在幻灯片 2 上,这意味着已经有一个计时器应该显示幻灯片 3,当我单击按钮 1 时,第一个计时器将保持运行以显示幻灯片 3,并且将创建另一个计时器以显示幻灯片 1。我解决了这个问题通过按住计时器并清除它。

另一个问题是,在您的 adnimation: fadeIn 回调中,您添加了按钮的单击 lisiner,我认为这会添加许多监听器,因此当您单击两次时,您将附加相同的监听器两次,因此在触发时调用两次。 这是我这边的修正作品。可能还有其他问题。 请注意单击和转换之间的时间。例如,如果您将 fadeIn 时间设置为与 setTimeout 相同的时间,您也会遇到同样的问题。

$(function () {
//edit
var timer='undefined';

var slides = new Array();
    slides[0] = 'http://i.imgur.com/UwRVo.png';
    slides[1] = 'http://i.imgur.com/wv08B.png';
    slides[2] = 'http://i.imgur.com/MlUbx.png'; 

   var max = $(slides).length;

var isBottom = false;

makeSlideBtns(max);

if(max>0) 
{
    LoadSlide(0,max);

}

function LoadSlide(index,max) {
     clearTimeout(timer);
     if(index<max)
        {
            var el0 = $("#slidebottom");
            var el1 = $("#slideover");
            var sbtn = $("#slidebtns li")[index];
            var img = new Image();
             $(sbtn).css('background-color', '#000'); 

            $(img).load(function () {
                $(this).css('display','none');
                if(isBottom == true)
                { 
                    $(el1).html(this);
                    $(el1).css('z-index', '3');
                    $(el0).css('z-index', '2');
                    console.log("el1 " + index);

                } else {
                    $(el0).html(this);
                    $(el1).css('z-index', '2');
                    $(el0).css('z-index', '3');
                    console.log("el0 " + index);

                }
                isBottom = !isBottom;

                function nextSlide () {                                                                      
                                LoadSlide(index+1,max);
                                console.log("sbtn: " + sbtn);
                                $(sbtn).css('background-color', '#fff');
                };

                $(this).fadeIn(2000,function() {
                        timer=setTimeout(nextSlide, 5000);     
                });


            }).error(function () {             
                LoadSlide(index+1,max);
            }).attr('src', slides[index]);  

        } else {
            LoadSlide(0,max)
        }
}

function makeSlideBtns (max) {

    for(i=0; i<max; i++) {
        var num = i + 1;
        $("#slidebtns").append('<li><a>' + num + '</a></li>');
    }
};

//add this in your loop will add more as you click
$("#slidebtns li").click(function () { 
     $("#slidebtns li").css('background-color', '#fff');                                               
     var i=$(this).index();             
      LoadSlide(i,max);
      return false;
  });

});​

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我添加点击事件时,我的 javascript 函数会重复运行(?) 的相关文章

随机推荐

  • With 函数中的多个对象表达式循环遍历所有工作表

    我有一个由两张表组成的 Excel 电子表格 Sheet1 and Sheet2 在每张纸上我都有一个Button 1 为了将此按钮移动到Range D9 E11 在两张表中 我使用以下 VBA 来引用解决方案here https stac
  • Angular 2 找不到我的功能模块中声明的组件

    我很难让模块在 Angular 2 中工作 我创造了a plunk http plnkr co edit gJup4zH7v4CoFNC8k5kZ p preview这说明了问题所在 在 plunk 中 您会看到我有 app module
  • 如何将文本附加到 d3.js 中的一行

    我正在尝试将文本附加到条形图上创建的线条中 问题是我可以看到文本元素已创建 但它没有显示在 svg 上的任何地方 我附加文本的代码部分 var line svg append line attr x1 function return x l
  • 是否可以在 Android 设备上运行容器?

    我是一名移动开发人员 最近擅长使用 docker 容器 我正在为我的研究生项目开发容器架构 该架构的模块之一需要在 Android 设备上运行 但我找不到有关如何在 Android 设备上运行容器的信息 它可以是一些简单的东西 比如用 py
  • 计算硬盘吞吐量

    我的应用程序创建了一个 2GB 文件 需要选择系统上速度最快且有足够空间的驱动器 我尝试通过创建文件 设置长度 然后按顺序向其中写入数据来计算吞吐量 如下所示 FileInfo file null var drives DriveInfo
  • PIL:将模式“I”的图像转换为“RGB”会产生全白图像

    据我所知 这个问题末尾的图像是模式 I 的 PNG 它代表 索引 我正在尝试创建一个缩略图 并使用 PIL 将其保存为 JPG 然而 我是否离开了mode独自一人 PIL 不会让我错误地调整它的大小unable to generate th
  • iloc 给出“IndexError:单个位置索引器超出范围”

    我正在尝试使用以下内容对一些信息进行编码以读入机器学习模型 import numpy as np import pandas as pd import matplotlib pyplot as py Dataset pd read csv
  • 当子模块存在时,Git diffing 在 Windows 上崩溃

    Using msysgit http code google com p msysgit 在窗户上 每当我这样做时git diff在具有一个或多个子模块的存储库上 命令提示符 以及 PowerShell 崩溃 这是已知的 但是有修复 解决方
  • AFNetworking 返回 NSCFData; registerHTTPOperationClass 的问题[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我是 AF
  • php sprintf() 包含外来字符?

    接缝就像 sprintf 有外来字符的问题 还是我做错了什么 看起来它在从字符串中删除像 这样的字符时有效 有必要吗 我希望以下几行能够正确对齐以生成报告 2011 11 27 A1823 Ref Leif 12 873 00 18 98
  • git clone,忽略目录

    我正在尝试在 WordPress 安装上测试一些东西 这样做时 我想快速复制该存储库 但是 上传目录 wp content uploads 很大 所以我想忽略它 注意 我不想一直 gitignore 这个目录 只是为了这个场景 基本上 我想
  • Bash 测试中的复合条件组[重复]

    这个问题在这里已经有答案了 我想在 Bash 中设置一些条件组if陈述 具体来说 我正在寻找类似以下内容的内容 if
  • 下载源代码时 AWS Codebuild 失败。消息:找不到参考

    当使用 git 标签作为源版本触发构建时 使用 AWS Codebuild 正常运行数月的 CI CD 管道突然开始失败 通过拉取请求 pr 触发的构建继续正常工作 任何帮助将非常感激 我在 CodeBuild 团队工作 我们已经回滚了可能
  • php ftp 建立多个目录

    这是我的 PHP 代码 它实际上工作得很好 newftpdir parent date Ymd YYYYMMDD newftpdir child ext folder username newftpdir newftpdir parent
  • FFMPEG:合并音频(.mp3)和单个图像将它们转换为视频

    我想合并 IMAGE AUDIO 并使用 FFMPEG 库将它们转换为视频 我成功编译了该库 并得到了 libfmpeg so 但是通过 java 代码执行 ffmpeg 命令时出现问题 这是我正在使用的命令 ffmpeg i image8
  • PHP 中多行注释内的多行注释

    PHP 返回 语法错误 这是否是使用多行注释的完全错误的方法 有时我需要注释掉一大块代码进行测试 而这个代码块包含数百行 并且里面有很多多行注释 注释掉这个大块的最佳方法是什么 除了暂时从文件中删除它之外 来自PHP手册 http php
  • XML 与逗号分隔的文本文件

    好吧 我读了几本关于 XML 的书 并编写了程序来吐出它 等等 但问题是这样的 逗号分隔文件和 XML 文件都是 人类可读的 但总的来说 逗号分隔文件比 XML 文件更容易被我看到 标签通常占用与数据一样多的空间 甚至更多 这似乎掩盖了我正
  • argc、argv、envp的内存布局

    据我了解 环境变量的值直接在内存中以 NULL 结尾argv价值观 除了环境变量之外 auxv存在 环境变量到底是如何布局的 这个布局在哪里指定 记录 以及它适用于哪些系统 一个简单的答案是 程序调用时堆栈的布局由二进制格式定义 例如 EL
  • iPhone Xcode 项目文件夹中是否存储了任何“敏感”内容?

    我想开源我的一个 iPhone 应用程序 我已经在 iTunes 商店中发布 但我显然不想暴露任何 敏感 内容 例如配置证书和代码签名密钥等 我猜那东西只是引用的从 Xcode 项目文件夹 实际上存储在磁盘上其他地方的我的钥匙串中 如果我要
  • 当我添加点击事件时,我的 javascript 函数会重复运行(?)

    免责声明 我正在尝试学习javascript 我不是一个聪明人 所以 我做了一个 Jquery 图像滑块 我很自豪 有用 它加载图像 并日复一日地逐个显示它们 生活过得很好 然后我想为滑块添加导航 黑暗降临在我的小王国上 当我单击其中一个按