【问题标题】:How to shuffle images at regular time intervals while hovered如何在悬停时以固定时间间隔随机播放图像
【发布时间】:2016-08-06 19:53:45
【问题描述】:

研究后:
Changing images on hover 是关于最接近帮助我的东西的发现。它没有多大帮助。我没有任何正式的网络经验。因此,任何这样做的人,将不胜感激 a) 解决我的问题,但 b) 真正知道为什么这件事不洗牌图像..

这就是我在 HTML 中所处的位置:

<div class="navBar" id="myNavBar">    
    <ul id="navOptions">

        <li> <img id="logo" 
              src="images/logo.png" 
              onmouseover="hoverFunction(this);" ></li>

        <li class="active"><a href="default.asp">Home</a></li>
        <li><a href="news.asp">News</a></li>
        <li><a href="contact.asp">Contact</a></li>
        <li><a href="about.asp">About</a></li>
    </ul>
</div>

我的 JavaScript:

function hoverFunction(element) {
    var images = ["images/logo.png",
                  "images/logo_2.png",
                  "images/logo_3.png",
                  "images/logo_4.png",
                  "images/logo.png"];

    for(var i=0; i < images.length; i++){
        $(element).attr("src",images[i]);
    }
    //element.setAttribute('src', 'images/logo_2.png');
}

有什么建议吗?

【问题讨论】:

  • 看起来您正在将图像从第一个更改为所有其他图像,然后尽快变回第一个。这将足够快,以至于您不会察觉到变化(在同一图像上开始和结束)。
  • 很好的分析。我想像这样的事情正在发生。或者我在函数中访问它的方式有问题。我想我喜欢的功能是“悬停时执行此操作”类型的功能。知道这样的事吗?
  • 顺便说一句:如果答案很好/有帮助,请为该答案投票。如果答案解决了您的问题,请接受。如果它既有用又解决了您的问题,请两者都做。这就是 StackExchange/stackoverflow 上的指示方式。你应该对所有问题都这样做。您还应该对您阅读的任何您认为好的问题或答案进行投票,即使它们不是您自己的问题。
  • @Makyen 太棒了,如果我的声誉允许,我会支持他们。我想我需要成为 15 岁,我目前是 11 岁。但评论的每个人都有一些非常好的反馈,至少发人深省。
  • @Mayken 如果您愿意为我的问题竖起大拇指,这将使我在未来有更多机会用竖起大拇指感谢像您这样有思想且乐于助人的人 :)

标签: javascript jquery image onhover


【解决方案1】:

您似乎想要的是,当&lt;img&gt; 悬停时,定期更改图像。通常,当您收到mouseenter 事件时,这将通过使用setInterval() 启动一个间隔计时器来完成。每次间隔触发时将调用的函数更改为下一个图像。当您收到mouseout 事件时,您将使用clearInterval() 停止间隔计时器。

以下代码将在鼠标悬停在&lt;div&gt; 上时循环显示图像:

var images = ["http://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a",
              "http://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/se/se-icon.png?v=93426798a1d4",
              "http://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/sf/sf-icon.png?v=6c3100d858bb",
              "http://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/su/su-icon.png?v=0ad5b7a83e49"
];
var curImageIndex = 0; // 0 is displayed by default
var intervalId; //Remember the ID of the interval so we can stop it later.

function startImageCycle(el){
    cycleImage(el); //Cycle the image now so feels responsive. Remove if not wanted.
    intervalId = setInterval(cycleImage,1000,el); //Change image every 1000ms (1s)
}
function stopImageCycle(el){
    clearInterval(intervalId);
}
function cycleImage(element){
    curImageIndex++;
    if(curImageIndex >= images.length) {
        curImageIndex = 0;
    }
    $(element).attr("src", images[curImageIndex]);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="navBar" id="myNavBar">
      <ul id="navOptions">
        <li>
          <img id="logo" src="http://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a"
               onmouseenter="startImageCycle(this);" onmouseout="stopImageCycle(this);"
        </li>
        <li class="active"><a href="default.asp">Home</a>
        </li>
        <li><a href="news.asp">News</a>
        </li>
        <li><a href="contact.asp">Contact</a>
        </li>
        <li><a href="about.asp">About</a>
        </li>
      </ul>
    </div>

【讨论】:

  • 非常乐于助人,真正值得赞赏的伙伴。
  • 非常干净易懂,很多道具。看到 setInterval 函数接受一个函数(递增和设置图像)、一个时间和一个 html 中的 img 对象也很酷。
  • @bmc,谢谢。我很高兴能提供帮助。
【解决方案2】:

要达到预期结果,请使用计数器

var counter=1;
function hoverFunction(element) {
   counter++
    var images = ["http://www.w3schools.com/css/img_fjords.jpg",
              "http://www.w3schools.com/css/img_forest.jpg",
              "http://www.w3schools.com/css/img_lights.jpg",
              "http://www.w3schools.com/css/img_fjords.jpg",
              "http://www.w3schools.com/css/img_forest.jpg"];

   $(element).attr("src",images[counter]);
  if(counter ==5){
    counter=1;
  }

//element.setAttribute('src', 'images/logo_2.png');
}

http://codepen.io/nagasai/pen/jAZogO

选项2:更新的codepen

http://codepen.io/nagasai/pen/WxYwvK

【讨论】:

  • 这是一个很好的回应,但我唯一的问题是它不像图像流那样随机播放,它只会在我悬停时随机播放一次。我希望它不断地在它们中随机播放,直到它不再悬停。
  • 这对我来说是一个非常有用的工具;太感谢了。它也很好用,只有 1 个问题:我无法阻止它过度洗牌!!我从您的解决方案中学到的是 3000 毫秒的 JQuery 的第二个参数!谢谢老哥!
  • @bmc 更新了 codepen - codepen.io/nagasai/pen/WxYwvK 现在检查一次 :)
  • @bmc,悬停时开始,悬停时停止
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 2011-05-23
  • 2019-04-17
  • 1970-01-01
  • 1970-01-01
  • 2013-05-24
  • 1970-01-01
相关资源
最近更新 更多