2016-08-06 6 views
1

После исследования:
Changing images on hover - это самое близкое найденное к чему-то, что мне помогло. Это не помогло. У меня нет официального опыта работы в Интернете. Итак, любой, кто это сделает, было бы неудобно: а) исправить мою проблему, но б) на самом деле знать, почему эта вещь не перетасовывает изображения.Как перемешать изображения с регулярными интервалами времени при наведении курсора

Так вот, где я нахожусь в своем 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'); 
} 

Любые советы?

+0

Похоже, вы изменяете изображение с первого по всем остальным и обратно в сначала как можно быстрее. Это будет достаточно быстро, чтобы вы не воспринимали изменения (начало и конец на одном и том же изображении). – Makyen

+0

Хороший анализ. Я подумал, что такое происходит. Или что-то не так с тем, как я обращался к нему в функции. Я предполагаю, что функция, для которой я похож, - это тип функции «While on hover do this». Знаешь что-нибудь подобное? – bmc

+0

BTW: Если ответ был хорошим/полезным, пожалуйста, подтвердите этот ответ. Если ответ решит вашу проблему, примите его. Если бы это было полезно и решило вашу проблему, сделайте обоим. Вот как это показано в StackExchange/stackoverflow. Вы должны сделать это на все ваши вопросы. Вы также должны перенести все вопросы или ответы, которые вы читаете, которые вы считаете хорошими, даже если они не отвечают на ваши вопросы. – Makyen

ответ

1

Для достижения ожидаемого результата, используйте счетчик

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

option2: обновленный codepen

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

+0

Это отличный ответ, но моя единственная проблема в том, что он не похож на поток перетасовки изображений, он только один раз перемещается, как я наведите курсор мыши. Я хотел, чтобы он постоянно перетасовал их всех, пока он больше не завис. – bmc

+0

@bmc обновлен codepen- http: // codepen.io/nagasai/pen/jAZogO –

+0

@bmc надеюсь, что это сработает для вас :) –

2

Что вы, кажется, хотите, чтобы, в то время как <img> наведен, периодически меняйте изображение. Как правило, это будет сделано путем запуска таймера интервалов, используя setInterval(), когда вы получите событие mouseenter. Функция, которая будет вызываться каждый раз, когда срабатывает интервал, изменяется на следующее изображение. Когда вы получаете событие mouseout, вы остановите интервал времени, используя clearInterval().

Следующий код будет циклически изображения при наведении указателя мыши над <div>:

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>

+0

Помимо полезного, по-настоящему оцененного помощника. – bmc

+0

Очень чистый и понятный тоже, много реквизитов. Также приятно видеть, что функция setInterval принимает функцию (которая увеличивает и устанавливает изображение), время и объект img в html. – bmc

+0

@bmc, спасибо. Я рад помочь. – Makyen

Смежные вопросы