2013-02-22 8 views
10

У меня есть сайт jQuery Mobile с некоторыми кнопками. Я хочу показать текст в правой части кнопки, если и когда область просмотра имеет 640 пикселей или ширину и скрыть текст в противном случае.Показать или скрыть текст кнопки в jQuery Mobile

Я знаю о iconpos option/data-attribute, который предназначен для этой цели, и что его можно установить на left, чтобы показать текст, когда я хочу его, и notext, когда я этого не сделаю. Возможно, я могу придумать Javascript, чтобы изменить атрибут и обновить кнопку на загрузке страницы, изменении ориентации и изменениях размера окна, но это может стать громоздким, и я не уверен, что я забываю какое-то событие, которое может вызвать окно просмотра ширина для изменения.

EDIT 2: Я проверил мой сайт на нескольких браузеров и устройств, и кажется, что изменение ориентации, изменение размеров окна и отображения и скрытия экранной клавиатуры (в тех случаях, когда эти вещи возможны) всегда вызывали событие resize, которое должно быть запущено на объекте window. Конечно, я не знаю точно, что это всегда произойдет во всех браузерах.

Я думал об использовании какой-то медиа-запрос, чтобы установить свойство display CSS на тексте как inline или none в зависимости от ширины окна просмотра, но после того, как я посмотрел на код JQuery Mobile, похоже, вариант iconpos затрагивает больше чем просто видимость текста: он влияет на размеры, атрибут заголовка, положение значка и некоторые другие вещи, поэтому это может быть невозможно, используя только CSS.

EDIT: Я забыл упомянуть, что кнопка находится в заголовке, поэтому это одна из встроенных кнопок. Простое скрытие текста с помощью CSS сделает его забавным.

Кто-нибудь здесь знает простой и практичный способ показать или скрыть текст на основе ширины видового экрана? Или как более общий вопрос: Кто-нибудь знает, как изменить атрибут данных на основе ширины видового экрана и заставить jQuery Mobile подтвердить изменения при изменении ширины видового экрана? Обнаружил similar question об изменении атрибута data и у него нет разумных ответов.

+0

Я не уверен, если это поможет вам, но есть сайт, который показывает текст довольно красиво. adnbutton.com –

+0

Можете ли вы разместить любой соответствующий код или создать jsfiddle? – Dom

+1

Хороший ответ для JQuery> = 1,4 http://stackoverflow.com/questions/21741088/how-to-remove-button-text-responsively-in-jquery-mobile – devsie

ответ

3

Это лучшее, что я придумал до сих пор:

$(window).resize(function() { 
    $(".ui-btn-left, .ui-btn-right, .ui-btn-inline").filter("[data-icon]") 
     .buttonMarkup({iconpos: window.innerWidth >= 640 ? "left" : "notext"}) 
     .buttonMarkup("refresh"); 
}); 

$(document).delegate("[data-role=page]", "pageinit", function() { 
    $(window).resize(); 
}); 
+0

Медиа-запросы намного лучше справляются с такими проблемами по сравнению с использованием JS. И это потому, что мобильный браузер всегда поддерживает MQ. –

+0

Какие правила я должен помещать в медиа-запросы? Я посмотрел на ответ Гаджотра, и он выглядел довольно хрупким. –

+0

Как мы должны знать код, необходимый, если вы не публикуете прецедент? –

6

Это чистое решение CSS, требуется браузер HTML5, но затем вновь JQuery Mobile также требует один:

/* Less then 620 px -------------------*/ 
@media all and (max-width: 620px){ 
    #custom-button span span { visibility:hidden;} 
}  

/* More then 640 px -------------------*/ 
@media only screen and (min-width: 640px) { 
    #custom-button span span { visibility:visible;} 
} 

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

Это рабочий пример jsFiddle: http://jsfiddle.net/Gajotres/adGTK/, просто растяните область результатов, чтобы увидеть разницу.

EDIT:

Это должно сделать это, например, тот же: http://jsfiddle.net/Gajotres/adGTK/

/* Less then 639 px -------------------*/ 
@media all and (max-width: 639px){ 
    #custom-button span span.ui-btn-text 
    { 
     left: -9999px !important; 
     position: absolute !important; 
    } 

    #custom-button span span.ui-icon 
    { 
     float: left !important; 
     margin: 2px 1px 2px 3px !important; 
     display: block !important; 
     z-index: 0 !important; 
     position: relative; 
     left: 0 !important; 
    } 

    #custom-button span.ui-btn-inner 
    { 
     padding: 0 !important; 
    } 

    #custom-button 
    { 
     height: 24px !important; 
     width: 24px !important; 
     margin-top: 5px; 
    }  
}  

Этот пример будет работать только с помощью кнопок, созданных с < > тега.

+0

Я забыл упомянуть, что я используя встроенную кнопку. Предполагается, что такая кнопка будет намного меньше, чем текст. В любом случае, я попробовал вашу идею, и она просто держала кнопку того же размера, но скрывала значок и текст. –

+0

Кроме того, я не знаю, является ли «span span» надежным селектором для ориентации текста на кнопке, или если структура внутри кнопки может измениться в будущих версиях jQuery Mobile. –

+0

Вы можете увидеть пример того, что происходит, когда я пробую вашу идею на встроенной кнопке по адресу http://jsfiddle.net/7mvdc/. –

0

Работа за и кнопки тегов данных-значок типа, по умолчанию набор data-iconpos="notext" в HTML, а затем связать pagebeforecreate orientationchange событие, чтобы добавить или удалить атрибут в соответствии с шириной экрана:

$(document).on('pagebeforecreate orientationchange', updateIcons); 

function updateIcons() { 
    if ($(window).width() > 480) { 
     $('a[data-icon], button[data-icon]').removeAttr('data-iconpos'); 
    } else { 
     $('a[data-icon], button[data-icon]').attr('data-iconpos', 'notext'); 
    } 
} 

EDIT: Похоже, он работает только на создание страницы, а не об изменении ориентации.

Кредит: [email protected]

+0

Работает ли это на немобильных устройствах, когда пользователь меняет размер окна? Я думаю, что это также связано с событием «resize». –

+0

Я нахожусь на работе, где я могу проверить это, и он, похоже, не работает вообще. Простое изменение атрибута 'data-iconpos' не приводит к появлению или исчезновению текста. Кнопка должна быть обновлена. См. Мой ответ. –

+0

Он работает на создание страницы, но, похоже, не работает на изменение ориентации (я протестировал его, вы можете сделать то же самое, загрузив [это приложение [(https://www.dropbox.com/s/95qmzdyvms924gg/WhereIparkedmycar- debug.apk? m), например). Возможно, чтобы он работал над изменением ориентации или изменением размера, для запуска события создания jQuery-мобильного сайта потребуется какой-то дополнительный код, но мне не нужно в это заглядывать. – jtblin

1

Это работает для меня довольно прочно в JQuery Mobile 1.4 Beta 1 после перехода к кнопке декларации класса только.

$(window).on("throttledresize", function() { 
    var smallButtons = $(window).width() <= 480; 
    $('#article_nav a').toggleClass('ui-btn-icon-notext', smallButtons); 
    $('#article_nav a').toggleClass('ui-btn-icon-left', !smallButtons); 
}); 
+0

Положите свою функцию, добавив готовый документ, работает как шарм! – jungerislaender

0

Вот чистое решение css, которое будет работать на IE8 + и всех других браузерах. Обратите внимание, что код из Twitter-Bootstrap, немного изменился.

DEMO

<button type="submit" class="btn btn-primary" value="Submit"> 
    <i id="versturen" class="fa fa-check"></i> 
    <span class="sr-only-xs"> Versturen</span> 
</button> 

@media (max-width: 767px) { 
    .sr-only-xs { 
    position: absolute; 
    width: 1px; 
    height: 1px; 
    padding: 0; 
    margin: -1px; 
    overflow: hidden; 
    clip: rect(0,0,0,0); 
    border: 0; 
    } 
} 
Смежные вопросы