2016-01-27 3 views
0

Для всего, над чем я работаю прямо сейчас, я очень хорошо переработал из jQuery в vanilla, но мне интересно, как я мог бы сделать следующее с vanilla JS.Как я могу преобразовать это из jQuery в vanilla JS?

Я хочу установить событие наведения на массив объектов. В функции обработчика событий я хочу изменить некоторые свойства css на некоторые дочерние элементы. Хитрость заключается в том, что я хочу выбрать эти дочерние элементы по классам, но обязательно выберите дочерние элементы из элемента, который вызвал обработчик события hover.

Так что мне нужно заменить .hover() .find() и .css() на vanilla JS.

$('.item').hover(function() { 
     $(this).find('.qLeft > img').css('box-shadow', '2px 2px 5px -1px black'); 
     $(this).find('.qRight > img').css('box-shadow', '-2px 2px 5px -1px black'); 
    }, function() { 
     $(this).find('.qLeft > img').css('box-shadow', '3px 5px 8px -2px black'); 
     $(this).find('.qRight > img').css('box-shadow', '-3px 5px 8px -2px black'); 
    }); 


<li style="float: left;" class="item"> 
    <div class="CardHeader"> 
     <h3>Appointment Calendar Book</h3> 
    </div> 
    <div> 
     <img src="Assets/Calendar%20-%20Appointment%20Book4.png" /> 
    </div> 
    <div class="qContainer"> 
     <div class="qLeft"> 
      <img src="Assets/BlackGreenMinus.png" /> 
     </div> 
     <div class="qCenter">1</div> 
     <div class="qRight"> 
      <img src="Assets/BlackGreenPlus.png" /> 
     </div> 
    </div> 
</li> 
+1

Вы могли бы включить html-макет для вышеуказанного кода? – depperm

+1

https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll – Teemu

+0

html был добавлен – JzInqXc9Dg

ответ

3

Вот часть решения. Вы должны быть в состоянии выяснить, как реализовать остальные:

var items = document.getElementsByClassName("item"); 

Array.prototype.forEach.call(items, function(element) { 
    element.addEventListener("mouseover", function() { 

    elements = this.querySelectorAll(".qLeft>img"); 

    Array.prototype.forEach.call(elements, function(el) { 
     el.style.boxShadow = "2px 2px 5px -1px black"; 
    }); 

    // same for qRight 
    }); 

    element.addEventListener("mouseout", function() { 
    // ... 
    }); 
}); 
+0

Это красиво :-) –

4

Попробуйте использовать css:hover

.item .qLeft > img { 
    /* default settings */ 
} 

.item .qRight > img { 
    /* default settings */ 
} 

.item:hover .qLeft > img { 
    /* do stuff */ 
} 

.item:hover .qRight >img { 
    /* do stuff */ 
} 
+0

Я хочу сделать javascript - не css! :) – JzInqXc9Dg

+0

почему бы не использовать чистые css? – depperm

+2

@Bubbas, почему? все, что вы показали, это то, что вы добавляете стиль теневой тени. Гораздо эффективнее всего сделать это в css, чем js. –