не знаю правильно ли... http://codepen.io/AnnushkaV/pen/ZQELmL
получается что раньше я только показывала каждое описание, но не прятала. теперь пытаюсь спрятать после того как убрался курсор. не срабатывает( |
додумалась. теперь все задуманное работает :dance:
поскажите, пожалуйста, как теперь навести порядок в коде? |
Цитата:
Можно конечно прятать/показывать нечто, то есть проверили создан ли объект с описанием, и если да, то показать, иначе сперва создать. Но ведь не факт, что пользователь будет кататься по элементам просматривая их описания по несколько раз, а значит и плодить объекты забивая ими документ не лучшее решение. .mouseenter() - создали объект с описанием и отобразили его. .mouseleave() - удалили созданный объект с описанием. И ничего плодится не будет. как теперь навести порядок в коде?
var name, bigImg = $(".films-descr").on('mouseenter', function(){
var im = bigImg.closest('div#img-container')
.find('img');
name = im.attr('src')
.split("/")
.pop()
.split(".")
.shift();
//здесь создавалась переменная mess- зачем, если не видно ее использования?
//это создали объект и показали
$("<h2>"+im.attr('title')+"</h2>").prependTo(bigImg.find("#" + name)).show();
}).on('mouseleave', function(){
//это сокращение, ибо name определили при заходе мышью на объект
//но с учетом выше сказанного, здесь нужен не .hide()
//а удаление ранее созданного объекта - remove() со всеми его потомками.
bigImg.find("h2").empty()
bigImg.find("#" + name).hide();
});
JQ всегда возвращает объект-источник, поэтому можно писать сразу: var name_var = $(selector).on(event, function() {...}) - и name_var = $(selector), или установить объекту обработчик, а кешировать его первый дочерний элемент, тогда: var name_var = $(selector).on(event, function() {...}).children().first() и $(selector) получит обработчик, а name_var = первый дочерний элемент $(selector). И поступать лучше именно так, не обращаясь к объектам по нескольку раз как вы это делаете тогда, когда он у вас уже есть в кеше. |
Цитата:
|
| Часовой пояс GMT +3, время: 05:46. |