Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.12.2013, 22:32
Интересующийся
Отправить личное сообщение для Сергей545 Посмотреть профиль Найти все сообщения от Сергей545
 
Регистрация: 30.11.2013
Сообщений: 15

при нажатии на раздел меню поворачивается маркер
Здравствуйте товарищи! Помогите пожалуйста.
Имеется меню "Аккордеон" с двумя разделами, содержащими подразделы. При нажатии на раздел, он раскрывается и при этом маркер (стрелка), имеющаяся на кнопке раздела, должна повернуться на 90 градусов, при закрытии вернуться в исходное положение.
На данный момент стрелка выполняет свою заданную роль только при наведении на неё курсора. Как сделать так чтобы она поворачивалась именно при нажатии на раздел.


<html>
<head>
	<script src="jquery-1.4.2.min.js" type="text/javascript"></script>	
	<script src="menu.js" type="text/javascript"></script>
    <script type="text/javascript" src="jQueryRotate.js"></script>
	<link rel="stylesheet" type="text/css" href="style.css" />
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title></title>

</head>
<body>
<div class="container">
<div align="center">
        <ul class="menu collapsible">
		<li class="expand">
			<a href="#">Рубрики<img src="blockbullets.png" style="margin-left:120px" id="rotateImg"> </h3></a>
			<ul class="acitem">
				<li><a href="#">Рубрика 1</a></li>
						<li><a href="#">Рубрика 2</a></li>
						<li><a href="#">Рубрика 3</a></li>
						
			</ul>
		</li>
 <!-- =====================Поворот===================================      -->
       <script type="text/javascript">
	jQuery("#rotateImg").rotate({ 
	   bind: 
	     { 
	        mouseover : function() { 
	            jQuery(this).rotate({animateTo:90})
	        },
	        mouseout : function() { 
	            jQuery(this).rotate({animateTo:0})
	        }
	     } 
	});
</script>
 
<!-- =====================================================       -->
		<li>
			<a href="#">Месяцы<img src="blockbullets.png" style="margin-left:126px" id="rotateImg"> </h3></a>
			<ul class="acitem">
			<li><a href="#">Январь (10)</a></li>
						<li><a href="#">Февраль (15)</a></li>
						<li><a href="#">Март (8)</a></li>
						<li><a href="#">Апрель (12)</a></li>
						
			</ul>
		</li>
	</ul>
</div>
</div>
</body>
</html>




Код menu.js

jQuery.fn.initMenu = function() {  
    return this.each(function(){
        var theMenu = $(this).get(0);
        $('.acitem', this).hide();
        $('li.expand > .acitem', this).show();
        $('li.expand > .acitem', this).prev().addClass('active');
        $('li a', this).click(
            function(e) {
                e.stopImmediatePropagation();
                var theElement = $(this).next();
                var parent = this.parentNode.parentNode;
                if($(parent).hasClass('noaccordion')) {
                    if(theElement[0] === undefined) {
                        window.location.href = this.href;
                    }
                    $(theElement).slideToggle('normal', function() {
                        if ($(this).is(':visible')) {
                            $(this).prev().addClass('active');
                        }
                        else {
                            $(this).prev().removeClass('active');
                        }    
                    });
                    return false;
                }
                else {
                    if(theElement.hasClass('acitem') && theElement.is(':visible')) {
                        if($(parent).hasClass('collapsible')) {
                            $('.acitem:visible', parent).first().slideUp('normal', 
                            function() {
                                $(this).prev().removeClass('active');
                            }
                        );
                        return false;  
                    }
                    return false;
                }
                if(theElement.hasClass('acitem') && !theElement.is(':visible')) {         
                    $('.acitem:visible', parent).first().slideUp('normal', function() {
                        $(this).prev().removeClass('active');
                    });
                    theElement.slideDown('normal', function() {
                        $(this).prev().addClass('active');
                    });
                    return false;
                }
            }
        }
    );
});
};

$(document).ready(function() {$('.menu').initMenu();});


Все исходники имеются во вложениях.
Изображения:
Тип файла: jpg меню как оно есть.jpg (3.5 Кб, 15 просмотров)
Вложения:
Тип файла: zip меню.zip (31.7 Кб, 18 просмотров)
Ответить с цитированием
  #2 (permalink)  
Старый 08.12.2013, 08:15
Новичок на форуме
Отправить личное сообщение для JuliusCaesar Посмотреть профиль Найти все сообщения от JuliusCaesar
 
Регистрация: 08.12.2013
Сообщений: 3

Замени в menu.js свою функцию на эту:

jQuery.fn.initMenu = function() {  
    return this.each(function(){
        var theMenu = $(this).get(0);
        $('.acitem', this).hide();
        $('li.expand > .acitem', this).show();
        $('li.expand > .acitem', this).prev().children().first().rotate({animateTo:90});                   
        $('li.expand > .acitem', this).prev().addClass('active');
        $('li a', this).click(
            function(e) {
                e.stopImmediatePropagation();
                var theElement = $(this).next();
                var parent = this.parentNode.parentNode;
                if($(parent).hasClass('noaccordion')) {
                    if(theElement[0] === undefined) {
                        window.location.href = this.href;
                    }
                    $(theElement).slideToggle('normal', function() {
                        if ($(this).is(':visible')) {
                            $(this).prev().addClass('active');
                        }
                        else {
                            $(this).prev().removeClass('active');
                        }    
                    });
                    return false;
                }
                else {
                    if(theElement.hasClass('acitem') && theElement.is(':visible')) {
                        $('.acitem:visible', parent).prev().children().rotate({animateTo:0});
                        if($(parent).hasClass('collapsible')) {
                            $('.acitem:visible', parent).first().slideUp('normal', 
                            function() {
                                $(this).prev().removeClass('active');
                            }
                        )
                        return false;  
                        }
                    return false;                   
                } 
                if(theElement.hasClass('acitem') && !theElement.is(':visible')) {         
                   $('.acitem:visible', parent).prev().children().rotate({animateTo:0});                        
                   $('.acitem:visible', parent).first().slideUp('normal', function() {
                        $(this).prev().removeClass('active');
                    });
                    
                    theElement.slideDown('normal', function() {
                        $(this).prev().children().first().rotate({animateTo:90});                        
                        $(this).prev().addClass('active');
                    });
                    return false;
                }
            }
        }
    );
});
};


и удали за ненадобностью из index.html этот кусок кода:

<!-- =====================Поворот===================================      -->
       <script type="text/javascript">
	jQuery("#rotateImg").rotate({ 
	   bind: 
	     { 
	        mouseover : function() { 
	            jQuery(this).rotate({animateTo:90})
	        },
	        mouseout : function() { 
	            jQuery(this).rotate({animateTo:0})
	        
	     } 
	});
</script>
 
<!-- =====================================================       -->
Ответить с цитированием
  #3 (permalink)  
Старый 08.12.2013, 11:31
Интересующийся
Отправить личное сообщение для Сергей545 Посмотреть профиль Найти все сообщения от Сергей545
 
Регистрация: 30.11.2013
Сообщений: 15

JuliusCaesar, Большое спасибо, выручил!!!
Подскажите также если нетрудно, - можно ли увеличить скорость поворота стрелки? Иначе она поворачивается с некоторым лагом.

Последний раз редактировалось Сергей545, 08.12.2013 в 12:09.
Ответить с цитированием
  #4 (permalink)  
Старый 08.12.2013, 16:08
Новичок на форуме
Отправить личное сообщение для JuliusCaesar Посмотреть профиль Найти все сообщения от JuliusCaesar
 
Регистрация: 08.12.2013
Сообщений: 3

понял про лаг, это не из-за скорости, переделал:

jQuery.fn.initMenu = function() {  
    return this.each(function(){
        var theMenu = $(this).get(0);
        $('.acitem', this).hide();
        $('li.expand > .acitem', this).show();
        $('li.expand > .acitem', this).prev().children().first().rotate({animateTo:90});                   
        $('li.expand > .acitem', this).prev().addClass('active');
        $('li a', this).click(
            function(e) {
                e.stopImmediatePropagation();
                var theElement = $(this).next();
                var parent = this.parentNode.parentNode;
                if($(parent).hasClass('noaccordion')) {
                    if(theElement[0] === undefined) {
                        window.location.href = this.href;
                    }
                    $(theElement).slideToggle('normal', function() {
                        if ($(this).is(':visible')) {
                            $(this).prev().addClass('active');
                        }
                        else {
                            $(this).prev().removeClass('active');
                        }    
                    });
                  return false;
                }
                else {
                    if(theElement.hasClass('acitem') && theElement.is(':visible')) {
                        $(theElement).prev().children().first().rotate({animateTo:0});
                        if($(parent).hasClass('collapsible')) {
                            $('.acitem:visible', parent).first().slideUp('normal', 
                            function() {
                                $(this).prev().removeClass('active');
                            }
                        )
                        return false;  
                        }
                    return false;                   
                } 
                if(theElement.hasClass('acitem') && !theElement.is(':visible')) {         
                   $(theElement).prev().children().first().rotate({animateTo:90});                        
                   $('.acitem:visible', parent).first().prev().children().first().rotate({animateTo:0});
                   $('.acitem:visible', parent).first().slideUp('normal', function() {
                    	    $(this).prev().removeClass('active');
                    });                    
                    theElement.slideDown('normal', function() {
                        $(this).prev().addClass('active');
                    });
                    return false;
                }
            }
        }
    );
});
};


но если надо ускорить анимацию поворота, то удобнее всего в файле jQueryRotate.js поменять выставленное значение по умолчанию на свое в этой строке:
this._parameters.duration = parameters.duration || this._parameters.duration || 1000;
Поставь например 200 вместо 1000))

А если хочешь, чтобы вкладки быстрее сворачивались и открывались, меняй в menu.js везде
slideUp('normal'...
на
slideUp('fast'...
Ответить с цитированием
  #5 (permalink)  
Старый 08.12.2013, 17:55
Интересующийся
Отправить личное сообщение для Сергей545 Посмотреть профиль Найти все сообщения от Сергей545
 
Регистрация: 30.11.2013
Сообщений: 15

Весьма признателен дружище!!! То что надо!!!!!!!
Ответить с цитированием
  #6 (permalink)  
Старый 08.12.2013, 22:15
Новичок на форуме
Отправить личное сообщение для JuliusCaesar Посмотреть профиль Найти все сообщения от JuliusCaesar
 
Регистрация: 08.12.2013
Сообщений: 3

не за что)))
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При нажатии на кнопку появляется другой текст ami_moor Общие вопросы Javascript 3 12.06.2015 16:56
смена картинок при нажатии sdff Общие вопросы Javascript 15 08.02.2014 17:08
Стрелка вниз на ссылке, при нажатии стрелка вверх Gasherez Общие вопросы Javascript 8 03.09.2013 00:34
Получение данных строки грида при нажатии сторонней кнопки Allan Stark ExtJS 4 17.11.2011 19:21
Проблема с аккордионом и меню Tie ExtJS 3 01.09.2011 14:36