Адаптивное меню гамбургеров не работает на мобильном сафари

Поскольку вас интересует только количество слов, и вас не интересуют отдельные слова, String.Split можно было бы избежать. String.Split удобен, но он излишне генерирует (потенциально) большое количество объектов String, что, в свою очередь, создает ненужную нагрузку на сборщик мусора. Для каждого слова в вашем тексте необходимо создать экземпляр нового объекта String, а затем скоро его собрать, так как вы его не используете.

Для домашнего задания это может не иметь значения, но если ваш текст содержимое ящика меняется часто, и вы делаете это вычисление внутри обработчика события, может быть разумнее просто перебирать символы вручную. Если вы действительно хотите использовать String.Split, перейдите к более простой версии, например Yonix .

В противном случае используйте алгоритм, подобный этому:

var text = richTextBox1.Text.Trim();
int wordCount = 0, index = 0;

while (index < text.Length)
{
   // check if current char is part of a word
   while (index < text.Length && !char.IsWhiteSpace(text[index]))
       index++;

   wordCount++;

   // skip whitespace until next word
   while (index < text.Length && char.IsWhiteSpace(text[index]))
       index++;
}

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

-3
задан Christian Ipanaque 17 January 2019 в 13:55
поделиться

2 ответа

Хорошо. Итак, после того, как я в течение целого дня гонялся за рассказом, наконец-то появился свет ...

В мобильных IOS нет такой вещи, как «щелчок» в качестве прослушивателя событий, однако «затронутый» находится в списке элементов:

https://developer.apple.com/ библиотека / архив / документация / AppleApplications / Reference / SafariWebContent / HandlingEvents / HandlingEvents.html # // apple_ref / doc / uid / TP40006511-SW8

Поэтому я протестировал его и устроил небольшой праздник, как он работал !!!!! сейчас я только что продублировал код, чтобы он работал, но позже мне придется его переписать. Затем стиль кнопки будет смотреть на это немного позже.

document.addEventListener("touchend", function(e) {
  if (e.target.id === "burger-time"){
    document.querySelector('nav').classList.add('open');
    document.getElementById('burger-time').style.visibility ='hidden';
  } else {
    document.querySelector('nav').classList.remove('open');
    document.getElementById('burger-time').style.visibility ='visible';
  }
});

document.addEventListener("click", function(e) {
  if (e.target.id === "burger-time"){
    document.querySelector('nav').classList.add('open');
    document.getElementById('burger-time').style.visibility ='hidden';
  } else {
    document.querySelector('nav').classList.remove('open');
    document.getElementById('burger-time').style.visibility ='visible';
  }
});

0
ответ дан 3otes 17 January 2019 в 13:55
поделиться

Таким образом, в этом есть нечто большее, чем просто различия между "touchend" и "click". Документация MDN содержала несколько полезных комментариев о том, как добавить прослушиватель событий для мобильных устройств!

Blockquote

Лучшие практикиSection

[119 ] Вот некоторые рекомендации, которые следует учитывать при использовании событий касания: ... Добавьте обработчики точек касания к определенному целевому элементу (а не ко всему документу или узлам выше в дерево документов).

Blockquote

Очевидно, что не рекомендуется использовать «document.addEventListener ()» для мобильных устройств, а не только для iPhone. Говорят, лучше выбрать купить отдельный элемент. https://developer.mozilla.org/en-US/docs/Web/API/Touch_events/Using_Touch_Events

В этом случае эти изменения необходимы для приготовления бургера. Работа с меню на всех устройствах, к которым у меня есть доступ:

let rootEvent = document.getElementById("rootElement");

let burgerNav = document.getElementById("burger-time");

burgerNav.addEventListener("click", function(e) {
    document.querySelector('nav').classList.add('open');
    burgerNav.style.visibility ='hidden';
    e.preventDefault();
    e.stopPropagation();


});

closeNav = function(){
    if (burgerNav.style.visibility === "hidden"){
       document.querySelector('nav').classList.remove('open');
       burgerNav.style.visibility ='visible';
    }
};

rootEvent.addEventListener("click", closeNav);
rootEvent.addEventListener("touchend", closeNav);
<html lang="en" dir="ltr" id="rootElement">

Это, вероятно, не единственный способ сделать это, но если муравей сломался ...

0
ответ дан 3otes 17 January 2019 в 13:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: