Я пытаюсь сделать простой слайдер панели jQuery и сделать его в основном там, где я хочу, за вычетом двух функций. Вы можете увидеть его версию по адресу: http://jsfiddle.net/7WArj/.
В настоящее время панель скользит вниз по содержимому и закрывается при нажатии кнопки закрытия. Кнопка меняется, потому что я хочу, чтобы изображение, которое в конечном итоге станет кнопкой, указывало вверх при открытии и вниз при закрытии.
Я хотел бы добавить функциональность, которая, когда вы больше не наводите курсор на панель, истечет время ожидания и скользит обратно через x секунд.
Я также хотел бы добавить функциональность, согласно которой, если вы щелкнете где-нибудь за пределами слайд-панели, это также вызовет скольжение панели вверх.
Я пробовал некоторые из них с .toggle() и .bind, но не смог заставить их работать должным образом. Меню будет случайным образом скользить вверх и вниз и т. д.
Если есть лучший способ написать мой код, я был бы очень признателен.
Ответ 1 · рейтинг 2 · A.M.K
Я почти уверен, что это то, что вы хотите, код прокомментирован тем, что я сделал:
Демонстрация: http://jsfiddle.net/SO_AMK/jhYWk/
jQuery:
jQuery(document).ready(function() {
jQuery("div#toppanel").attr('tabindex', -1); //Let the DIV have focus
jQuery("div#toppanel").blur(function(){
jQuery("div#panel").animate({height: "0px"}, "fast"); // On blur, hide it
});
timerRunning = false;
jQuery("div#panel").hover(function(){ //on mouse over clear a timeout if it exists
if (timerRunning) {
clearTimeout(hoverTimeout);
timerRunning = false;
}
},
function(){ //on mouse out set the timeout
hoverTimeout = setTimeout(function(){
jQuery("div#panel").animate({height: "0px"}, "fast");
}, 2000);
timerRunning = true;
});
jQuery('#toppanel').click(function(event){
event.stopPropagation();
});
jQuery("div.panel_button").click(function(){
jQuery("div#panel").focus().animate({ height: "250px" }, "fast");
jQuery("div.panel_button").toggle()
});
jQuery("div#hide_button").click(function(){
jQuery("div#panel").animate({height: "0px"}, "fast");
});
});
CSS:
#toppanel {
outline: 0; /* Remove yellow outline in Chrome */
z-index: 25;
text-align: center;
position: absolute;
top: 0px;
left: 0px;
}
#panel {
position: relative;
height: 0px;
margin-left: auto;
margin-right: auto;
z-index: 10;
overflow: hidden;
text-align: left;
height: 0px;
display: block;
background-color: #efefef;
border: 1px solid #000;
width: 150px;
}
#panel_contents {
height: 100%;
width: 603px;
position: absolute;
z-index: -1;
}
.the_content {
margin-top:40px;
}
HTML: То же
Ответ 2 · рейтинг 1 · jmayeux
он работает хорошо, но я обнаружил проблему, если вы откроете его с помощью "Кнопки вниз", а не мыши, и подождите, пока он закроется => Хорошо.
Проблема на данный момент, если вы откроете его снова с помощью "Button Down", он сразу же закроется.
Если можно, я предлагаю решение закрыть, пока мышка остается, поэтому
$( "#toppanel" ).mouseleave(
function( event ){
var container = $( "#panel" );
if (container.is( ":visible" )){
$('#panel').delay(1800).slideUp(300);}
});