Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.05.2011, 17:35
Интересующийся
Отправить личное сообщение для john1992on Посмотреть профиль Найти все сообщения от john1992on
 
Регистрация: 18.11.2010
Сообщений: 12

Кнопка и ее 3 основных состояния
Должен был сделать панель меню с кнопками имеющими 3 состояния link,hover,visited(active) -как в обычном html, но background'ом-спрайтом, т.е. для всех кнопок один файл фона, потому и пришлось пользоваться jQuery. Вот сделать 2 состояния - я смог, но как обработать клик по кнопке и в случае ее нажатия перевести ее в состояние active(оставить кнопку в состояние hover, пока не будет нажата другая)?

Два состояния делал так:
$("#logo1").hover(
		function () {	
		$("#logo1").css('background-position', '-150px 0px');
		}, function () {	
		$("#logo1").css('background-position', '0px 0px');
		});


П.С. Только начал изучать JQuery, вижу не так много русскоязычного материала, потому и сам не могу понять как справится с такой задачей, ибо пока не знаю всех возможностей...
Ответить с цитированием
  #2 (permalink)  
Старый 14.05.2011, 17:52
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

Псевдоклассы css :active и :hover могут применяться и не только к ссылкам. Если Вам особо не нужен IE6, с jQuery можно даже не заморачиваться.
<style type="text/css">
/* обычное состояние */
button {background: lightgrey; border: none 0px;}
/* фокус на элементе */
button:focus {background: aliceblue}
/* курсор наведен */
button:hover {background: yellow}
/* кнопка вжата */
button:active {background: orange}
</style>
<button>Я кнопка</button>
Ответить с цитированием
  #3 (permalink)  
Старый 14.05.2011, 17:53
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

<style type = "text/css">
button{
	border: 1px solid gray;
}

button:hover{
	border-color: red;
}

.hovered{
	border-color: red;
}

</style>
<button id = "#button">button</button>

<script type = "text/javascript">

var button = document.getElementById("#button");

button.onclick = function(){
	this.className = this.className == "" ? "hovered" : "";
}
</script>


UPD
ой я кажется не совсем понял что автор хотел, прошу прощения заранее
__________________
readOnly

Последний раз редактировалось poorking, 14.05.2011 в 17:55.
Ответить с цитированием
  #4 (permalink)  
Старый 14.05.2011, 17:59
Интересующийся
Отправить личное сообщение для john1992on Посмотреть профиль Найти все сообщения от john1992on
 
Регистрация: 18.11.2010
Сообщений: 12

subzey,
poorking,
О таких типах решения я знаю,
но если есть время и знания, хотел бы узнать решение именно моей задачи(т.е. с использованием sprite для фона кнопок).
Ответить с цитированием
  #5 (permalink)  
Старый 14.05.2011, 18:05
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

john1992on,
Ну и что? суть в том что вы будете менять класс, а в классе свой background-position
<style type = "text/css">
button{
	border: 1px solid lime;
	background: url("http://javascript.ru/forum/images/ca_serenity/misc/logo.gif");
	color: white;
	cursor: pointer;
}

button:hover{
	border-color: red;
	background-position: center center;
}

.hovered{
	border-color: red;
	background-position: center center;
}

</style>
<button id = "#button">button</button>

<script type = "text/javascript">

var button = document.getElementById("#button");

button.onclick = function(){
	this.className = this.className == "" ? "hovered" : "";
}
</script>
__________________
readOnly

Последний раз редактировалось poorking, 14.05.2011 в 18:09.
Ответить с цитированием
  #6 (permalink)  
Старый 14.05.2011, 19:35
Интересующийся
Отправить личное сообщение для john1992on Посмотреть профиль Найти все сообщения от john1992on
 
Регистрация: 18.11.2010
Сообщений: 12

poorking,
А что если кнопок 3...? При изменение класса первой и нажатие на вторую - первая останется с измененным class.
Понимаю, что у вас позиция - не использовать jQuery, но все же... может поможете с ответом на именно мой вопрос?
Ответить с цитированием
  #7 (permalink)  
Старый 14.05.2011, 19:50
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

john1992on,
Вот набыдлокодил вам по-быстренькому
<div id = "#wrapper"></div>
<style type = "text/css">

.normal{
	color: gray;
}

.hvr{
	color: green;
}

.act{
	color: red;
}
</style>

<script type = "text/javascript">
function Tumbler(elem, quantity, pacific, hovered, active){
	if(!elem) return;
	
	quantity || (quantity = 1);
	pacific || (pacific = "");
	hovered || (hovered = "");
	active || (active = "");
	
	var elems = this.elems = [];
	
	function makeHovered(){
		if(!(this.className == active)){
			this.className = hovered;
		}
	}
	
	function removeHovered(){
		if(!(this.className == active)){
			this.className = pacific;
		}
	}
	
	function makeActive(){
		this.className = this.className == hovered ? active : hovered;
		for(var i = 0, l = elems.length; i < l; i ++){
			if(elems[i] === this){
				continue;
			}
			if(elems[i].className == active){
				elems[i].className = pacific;
			}
		}
	}
	
	for(var i = 0; i < quantity; i ++){
		this.elems[i] = document.createElement(elem);
		this.elems[i].className = pacific;
		this.elems[i].onmouseover = makeHovered;
		this.elems[i].onmouseout = removeHovered;
		this.elems[i].onclick = makeActive;
	}
}

Tumbler.prototype.getAll = function(){
	var f = document.createDocumentFragment();
	for(var i = 0, l = this.elems.length; i < l; i ++){
		f.appendChild(this.elems[i]);
	}
	return f;
}

var buttons = new Tumbler("BUTTON", 5, "normal", "hvr", "act");

for(var i = 0, l = buttons.elems.length; i < l; i ++){
	buttons.elems[i].innerHTML = "button " +i; 
}

function byId(id){
	return document.getElementById(id);
}

byId("#wrapper").appendChild(buttons.getAll());
</script>

можете наполнить протитип методами какими вдумается, css-классы свои нарисуйте, а лучше вообще по-своему сделайте, я просто набросал не подумав, если js будет выключен то кнопок не будет) ну или переделайте конструктор чтобы он ел узел или выборку.
И да про JQuery, у меня нет никакого принципа типа Jquery плохо, я считаю это гениальным изобретением, но пользоваться ей не вижу смысла(может, пока-что), и не хочу повторить судьбу тех, кто блестяще запомнил все методы и плюшки в ней, но нативных методов не знает и вообще не представляет как работает все в JS, или задает потом вопросы, а как мне в Jquery Регулярное выражение использовать?,
Вот когда смогу сам такую написать, то буду пользоваться, и то своей.
И наконец )) не знаю я Jquery, так что простите
__________________
readOnly

Последний раз редактировалось poorking, 14.05.2011 в 20:02.
Ответить с цитированием
  #8 (permalink)  
Старый 14.05.2011, 20:12
Интересующийся
Отправить личное сообщение для john1992on Посмотреть профиль Найти все сообщения от john1992on
 
Регистрация: 18.11.2010
Сообщений: 12

poorking,
Лано, спасибо за труд!, Вы действительно профессионал по JS, но думаю, я сделаю по-своему, т.е. на фреймворке jQuery(потому и написал в именно в эту ветку форума), т.к. Ваш вариант можно переделать под мои нужды(использование sprite для фона кнопок), но это лично мне не под силу, да и нет(точнее совсем нет) желания морочить Вам с этим голову.


Если есть человек, хорошо знающий именно jQuery - просьба отозватся, есть пара моментов, которые хотел спросить...
Ответить с цитированием
  #9 (permalink)  
Старый 14.05.2011, 20:56
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

<script type = "text/javascript" src = "http://code.jquery.com/jquery-1.6.1.min.js"></script>
<style type = "text/css">
.mymegabutton{
	color: gray;
}

.hvr{
	color: green;
}

.act{
	color: red !important;
}
</style>
<button class = "mymegabutton">button 1</button>
<button class = "mymegabutton">button 2</button>
<button class = "mymegabutton">button 3</button>
<button class = "mymegabutton">button 4</button>
<button class = "mymegabutton">button 5</button>
<button class = "mymegabutton">button 6</button>
<script type = "text/javascript">
$(".mymegabutton").each(function(i, a){
	$(this).hover(function(){
		$(this).addClass("hvr");
	}).mouseout(function(){
		$(this).removeClass("hvr");
	}).click(function(){
		var that = this;
		$(".mymegabutton").each(function(){
			if(this === that){
				$(this).toggleClass("act");
				return;
			}
			$(this).removeClass("act");
		})		
	})
})

</script>

ну вот jquery, принцип тот же, цсс классы тебе все равно надо написать самому, просто вместо "hvr", "act" свои классы подставь
__________________
readOnly

Последний раз редактировалось poorking, 14.05.2011 в 21:10.
Ответить с цитированием
  #10 (permalink)  
Старый 14.05.2011, 21:15
Интересующийся
Отправить личное сообщение для john1992on Посмотреть профиль Найти все сообщения от john1992on
 
Регистрация: 18.11.2010
Сообщений: 12

poorking,
Я не могу задать всем класы, т.к. у меня для каждой кнопки отдельный стиль изменения позиции фона:

.mymegabutton {
	width:150px;
	height:150px;
	background-image:url(images/book-logo.png);
	margin-top:20px;
}

#mymegabutton1 {
	background-position: 0 0;
}

#mymegabutton2 {
	background-position: -300px 0;
}

#mymegabutton3 {
	background-position: -600px 0;
}


а для act:
$("#mymegabutton1").css('background-position', '-150px 0px');
$("#mymegabutton2").css('background-position', '-450px 0px');
$("#mymegabutton3").css('background-position', '-750px 0px');


т.е. для каждой кнопки - параметр css другой, кнопок всего 3.

Но с вашего кода, я уже вроде начал понимать кое какие непонятные моменты...

П.С. я Ваш должник
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бегущая строка в строке состояния DexS Общие вопросы Javascript 0 06.05.2011 14:43
Не работает кнопка отправки после загрузки Igor Shmigoff jQuery 2 29.12.2010 21:51
Кнопка onclick=javascript:location в новом окне Nikola Общие вопросы Javascript 7 13.11.2010 11:16
Зажимающаяся кнопка Darth Padla Элементы интерфейса 5 21.06.2010 10:01
Не работает кнопка "Назад" savagden Javascript под браузер 3 10.12.2009 20:25