Правильный способ отображения состояния нажатия кнопки в меню навигации приложения html5/phonegap в стиле iOS (изображение включено)

Название немного многословно, но я хочу знать, как лучше всего отформатировать мой div, чтобы показать, что кнопка на нижней панели навигации была нажата. (не вопрос графического дизайна)

Я думал сделать 1 сплошное изображение для панели навигации в состоянии по умолчанию. Я установлю div вокруг каждой «кнопки», чтобы обнаружить нажатие. Когда кнопка нажата, я буду отображать отдельное изображение кнопки в нажатом состоянии.

Я добавил потрясающее изображение, чтобы проиллюстрировать мой вопрос.

введите здесь описание изображения

Альтернативой является создание 8 уникальных кнопок. Тем не менее, я знаю, что большинство psd, которые я видел, имеют навигационные панели, установленные по умолчанию и нажатые, в виде сплошных элементов с наложенными сверху значками (например: http://dribbble.com/shots/691632-App-net-Starter-Kit?list=tags&tag=appDOTnet< /а>)

Спасибо за помощь!


person Emin Israfil    schedule 07.03.2013    source источник


Ответы (1)


Честно говоря, такой подход кажется мне немного тяжеловатым.

У вас уже есть пять изображений, так почему бы просто не создать спрайт, содержащий состояние нажатия для каждой отдельной кнопки, а также состояние ненажатия, а затем скользить, используя свойство CSS «background-position»?

Ваш CSS будет выглядеть примерно так:

div.buttons {
 background-image: url(images/myimage.png);
 background-position: 0 0;
 position:relative;
 width:64px;
}
div.buttons.dog{
 background-position: 0 32px;
}
div.buttons.cat{
 background-position: 0 64px;
}
div.buttons div.dog{
 position:absolute;
 left: 0;
 top: 0;
 width: 32px;
 height: 32px;
 border: transparent 1px solid;
}
div.buttons div.cat{
 position:absolute;
 left: 32px;
 top: 0;
 width: 32px;
 height: 32px;
 border: transparent 1px solid;
}

С вашим HTML как:

<div class="buttons">
 <div class="dog"></div>
 <div class="cat"></div>
</div>

А затем что-то простое для jQuery, например:

$('div.buttons').children().each(function(){
  $(this).click(function() { $(this).parent().addClass($(this).attr('class')).removeClass($(this).siblings().attr('class'));
});

ОБНОВЛЕНИЕ

По запросу спрашивающего, вот как вы могли бы реализовать наложение div на слой кнопки. Во-первых, начните с блока CSS div.buttons вверху, только вместо спрайта используйте свое изображение для кнопок в их положении по умолчанию «выключено».

Затем создайте четыре контейнера как таковые (здесь я использовал div, но вы могли бы использовать любой элемент, который дает соответствующий семантический контекст для контейнера).

CSS

div.buttons{
 background-image: url(images/myimage.png);
 background-position: 0 0;
 position:relative;
 width:136px; /* whatever your width for the image is */
}

div.fish, div.rabbit, div.dog, div.cat {
 position: absolute;
 top: 0;
 background-size: cover;
 height: 24px; /* Whatever the height of your buttonbar is */
}
div.cat{
 width: 32px; /* Width of your button */
 left: 0;
 background-image: none;
}
div.on.cat {
 background-image: url(path/to/catImage.png);
}
div.dog {
 left: 32px; /* The width of the preceding button(s), if they exist */     
 width: 40px; /* Width of your button */
 background-image: none;
}
div.on.dog {
 background-image: url(path/to/dogImage.png);
}
div.rabbit {
 left: 72px; /* The width of the preceding button(s), if they exist */     
 width: 32px; /* Width of your button */
 background-image: none;
}
div.on.rabbit {
 background-image: url(path/to/rabbitImage.png);
}
div.fish {
 left: 104px; /* The width of the preceding button(s), if they exist */     
 width: 40px; /* Width of your button */
 background-image: none;
}
div.on.fish {
 background-image: url(path/to/fishImage.png);
}

HTML

<div class="buttons">
   <div class="cat"></div>
   <div class="dog"></div>
   <div class="rabbit"></div>
   <div class="fish"></div>
</div>

Это предполагает, что ваш div, «обертывающий» фрагмент кнопки, имеет класс, соответствующий его животному, но, очевидно, это может быть все, что вы хотите. Затем в событии щелчка вы просто примените класс, который вам нужен, к нажатой кнопке. Используемый вами jQuery будет выглядеть так:

JQuery

$('.buttons > div').on('click',function(){
    var t = $(this);
    t.siblings.removeClass('on');
    t.addClass('on');

    //Whatever your button is supposed to do normally here
});
person Josh Burgess    schedule 07.03.2013
comment
Извините, за поздний ответ, я был в отъезде в эти выходные. Я думал об этом, и я уверен, что это сработает, но почему-то это кажется тяжелым методом. Любое предположение, как можно было бы использовать установку Марка Эдварда? (Спасибо, что все написали и объяснили понятно, это помогло мне, и я уверен, что это поможет другим) - person Emin Israfil; 11.03.2013
comment
Можно ли адресовать вопрос конкретному пользователю? то есть @Марк Эдвардс - person Emin Israfil; 11.03.2013
comment
Хорошо обязательно. Вы не можете вызвать пользователя специально, но, я думаю, вы можете проверить, есть ли способ связаться с ним за пределами StackOverflow. В любом случае, если вы хотите использовать этот стиль реализации, я обновлю свой ответ. - person Josh Burgess; 11.03.2013