24.02.2013, 19:48
|
Новичок на форуме
|
|
Регистрация: 08.02.2013
Сообщений: 9
|
|
Меню на jQuery. Помогите доделать клик на странице. Deff
Этот скрипт взят у Deff
Есть идея доработки. Идея в том, что данный скрипт будет использован в качестве горизонтального меню.
Добавить нужно лишь действие описывающее клик на любом месте страницы, при котором открытые пункты меню будут сворачиваться.
И вместо $( this ).slideToggle( 1 );return true; и $( this ).slideUp( 1 );return true; сделать .hide(); и .show();
Попробовал реализовать все сам, но к сожалению ничего не получилось.
function setcookie(a,b,c) {
if(c){
var d = new Date();
d.setTime(d.getTime()+c);
}
if(a && b)
document.cookie = a+'='+b+(c ? '; expires='+d.toUTCString() : '');
else
return false;
}
function getcookie(a) {
var b = new RegExp(a+'=([^;]){1,}');
var c = b.exec(document.cookie);if(c) c = c[0].split('=');
else
return false;
return c[1] ? c[1] : false;
}
$(document).ready(function() {
var nav = $(".menu");
var uls = nav.find("ul");
$('ul li').has('ul').addClass('include');
var coci_MENU= getcookie( "MENU" );
if (coci_MENU) {
setcookie( "MENU",coci_MENU ,30*3600*24*1000 );
// тут получаем индексы из куки и перебираем их:
var showedElems = ( coci_MENU || "" ).split(",");
for( var i = 0; i < showedElems.length; i++ ) {
// отображаем при загрузке то что надо.
$( uls[ showedElems[ i ] ] ).show();
}
}
nav.find("a").click(function() {
var Lnk=$(this).attr("href");
if(Lnk==''||Lnk.indexOf('#')==0) setcookie( "MENU",1 ,-1);
var self = $(this).next();
if ( self.length == 0 ) return;
var showedElems = [];
uls.each(function( index ){
if ( this === self[0] ) {
if ( self.css('display') == "none" ) {showedElems.push(index);}
$( this ).slideToggle( 1 );return true;
}
if ( jQuery.inArray( this, self.parents( "ul" ) ) == -1 ) {
$( this ).slideUp( 1 );return true;
}
showedElems.push(index);
});
// эту переменную суём в куки,
setcookie( "MENU", showedElems.join(",") ,30*3600*24*1000 );
return false;
});
}).click(function() {
$(".sub-menu").hide();
$(".highlight").removeClass("highlight");
});
Вот то, что у меня получилось http://learn.javascript.ru/play/3C3.
Работает клик по странице и все скрывается, но есть лишь одна трудность, если кликнуть в любом месте выпадающего меню, то оно тоже скрывается, собственно это и нужно исправить.
Последний раз редактировалось Mizter, 24.02.2013 в 22:21.
|
|
24.02.2013, 19:52
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Mizter,
Чтобы не скрывался - последняя рабочай ссылка в меню должна быть реальной ссылкой, а не <li><a href="#">Главная 2</a></li>
Либо должна быть продолжена вложенность
|
|
24.02.2013, 19:59
|
Новичок на форуме
|
|
Регистрация: 08.02.2013
Сообщений: 9
|
|
Deff, не могли бы Вы это сделать? Я изменил все <li><a href="#">Главная 2</a></li> на рабочие ссылки и все равно не работает.
|
|
24.02.2013, 20:02
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от Mizter
|
coci_MENU
|
Оригинальное название ))
|
|
24.02.2013, 20:04
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от Mizter
|
Я изменил все <li><a href="#">Главная 2</a></li>
|
Есть реальная тестовая страница ?
В песочницах переходы по ссылкам запрещены
И куки в песочне не держаться, поскольку при каждом просмотре генериться новая страница
Последний раз редактировалось Deff, 24.02.2013 в 20:27.
|
|
24.02.2013, 22:12
|
Новичок на форуме
|
|
Регистрация: 08.02.2013
Сообщений: 9
|
|
Deff,
http://artlab.tk/laboratorize/ver.0.1a/index.html вот реальная текстовая страница
В ней видно, что в куки не записывается событие нажатия мышкой по любому месту страницы и последующему скрытию объекта.
Последний раз редактировалось Mizter, 24.02.2013 в 22:23.
|
|
25.02.2013, 00:17
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Mizter,
Криво скопировали скрипт куков, работал же, зачем красоту наводить, и суньте скрипты, как есть на страницу,
<!DOCTYPE html>
<html>
<head>
<title>Песочница</title>
<link rel="stylesheet" href="http://artlab.tk/laboratorize/ver.0.1a/my.css" type="text/css" media="screen" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
<!--<script type="text/javascript" src="http://artlab.tk/laboratorize/ver.0.1a/my.js"></script>-->
<script type="text/javascript">
function setcookie(a,b,c) {if(c){var d = new Date();d.setTime(d.getTime()+c);}if(a && b) document.cookie = a+'='+b+(c ? '; expires='+d.toUTCString() : '');else return false;}
function getcookie(a) {var b = new RegExp(a+'=([^;]){1,}');var c = b.exec(document.cookie);if(c) c = c[0].split('=');else return false;return c[1] ? c[1] : false;}
$(document).ready(function() {
var nav = $(".menu");
var uls = nav.find("ul");
$('ul li').has('ul').addClass('include');
var coci_MENU= getcookie( "MENU" );
if (coci_MENU) {
setcookie( "MENU",coci_MENU ,30*3600*24*1000 );
// тут получаем индексы из куки и перебираем их:
var showedElems = ( coci_MENU || "" ).split(",");
for( var i = 0; i < showedElems.length; i++ ) {
// отображаем при загрузке то что надо.
$( uls[ showedElems[ i ] ] ).show();
}
}
nav.find("a").click(function() {
var Lnk=$(this).attr("href");
if(Lnk==''||Lnk.indexOf('#')==0) setcookie( "MENU",1 ,-1);
var self = $(this).next();
if ( self.length == 0 ) return;
var showedElems = [];
uls.each(function( index ){
if ( this === self[0] ) {
if ( self.css('display') == "none" ) {showedElems.push(index);}
$( this ).toggle();return true;
}
if ( jQuery.inArray( this, self.parents( "ul" ) ) == -1 ) {
$( this ).hide();return true;
}
showedElems.push(index);
});
// эту переменную суём в куки,
setcookie( "MENU", showedElems.join(",") ,30*3600*24*1000 );
return false;
});
})
</script>
<style>
.sub-menu a {
display:inline-block;
width:100%;
margin:0;
}
</style>
</head>
<body>
<ul class="menu">
<li><a href="#">My Account</a>
<ul class="sub-menu">
<li><a href="/laboratorize/ver.0.1a/index2.html">Главная 2</a></li>
<li><a href="/laboratorize/ver.0.1a/index2.html" >Dashboard</a></li>
<li><a href="/laboratorize/ver.0.1a/index2.html" >Profile</a></li>
<li><a href="/laboratorize/ver.0.1a/index2.html">Settings</a></li>
<li><a href="/laboratorize/ver.0.1a/index2.html">Send Feedback Follow Link</a></li>
<li><a href="/laboratorize/ver.0.1a/index2.html">Sign Out</a></li>
</ul>
</li>
<li><a href="#dashboard" >Dashboard</a>
<ul class="sub-menu">
<li><a href="/laboratorize/ver.0.1a/index2.html">Главная 2</a></li>
<li><a href="/laboratorize/ver.0.1a/index2.html" >Dashboard</a></li>
<li><a href="/laboratorize/ver.0.1a/index2.html" >Profile</a></li>
<li><a href="/laboratorize/ver.0.1a/index2.html">Settings</a></li>
<li><a href="/laboratorize/ver.0.1a/index2.html">Send Feedback Follow Link</a></li>
<li><a href="/laboratorize/ver.0.1a/index2.html">Sign Out</a></li>
</ul>
</li>
<li><a href="/laboratorize/ver.0.1a/index.html" >Profile</a></li>
<li class="tap"><a href="/laboratorize/ver.0.1a/index.html">Settings</a></li>
<li><a href="/laboratorize/ver.0.1a/index.html">Send Feedback Follow Link</a></li>
<li><a href="#signout">Sign Out</a>
<ul class="sub-menu">
<li><a href="/laboratorize/ver.0.1a/index2.html">Главная 2</a></li>
<li><a href="/laboratorize/ver.0.1a/index2.html" >Dashboard</a></li>
<li><a href="/laboratorize/ver.0.1a/index2.html" >Profile</a></li>
<li><a href="/laboratorize/ver.0.1a/index2.html">Settings</a></li>
<li><a href="/laboratorize/ver.0.1a/index2.html">Send Feedback Follow Link</a></li>
<li><a href="/laboratorize/ver.0.1a/index2.html">Sign Out</a></li>
</ul>
</li>
</ul>
</body>
</html>
Последний раз редактировалось Deff, 25.02.2013 в 01:21.
|
|
25.02.2013, 00:28
|
Новичок на форуме
|
|
Регистрация: 08.02.2013
Сообщений: 9
|
|
Deff,
Скрипит куков работает правильно и записывает информацию о нажатии, но только при повторном нажатии на элемент, когда нужно скрыть, нужно просто прописать записывание куков в .click(function () {....}); но Я не знаю как правильно, плюс еще не знаю как решить проблему с нажатием на выпадающее меню и последующим его скрытием
Тем более если вставлять весь код целиком на страницу, то это будет не совсем удобно для последующей правки, стремлюсь к меньшему количеству строк
Последний раз редактировалось Mizter, 25.02.2013 в 00:36.
|
|
25.02.2013, 00:45
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Пробуйте - собрал из Ваших кусков и вставил куки исходные
Проверить память: выбрать менюшку и нажать повторно "посмотреть"
=========================================
Во фрейме, тут в топике, - DOM устанавливаецо медленно, так что кликайте после 20-30 сек
Последний раз редактировалось Deff, 25.02.2013 в 00:52.
|
|
25.02.2013, 01:08
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Добавил стиль, чтоб не кликалось мимо ссылки
<style>
.sub-menu a {
display:inline-block;
width:100%;
margin:0;
}
</style>
|
|
|
|