не знаю правильно ли... 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, время: 04:04. |