Speaker Deck — сервис для обмена слайдами.
После проведения особо крупной конференции на этот сервис будет загружено много презентационного материала.
Мне нравится просматривать эти слайды.
У Speaker Deck нет особых проблем с просмотром на ПК.
Тем не менее, это немного разочаровывает при просмотре на мобильном телефоне.
Потому что Speaker Deck имеет макет только для ПК.
Я думаю, что во время поездок на работу обычно просматривают Twitter и RSS.
В это время слайды, перенесенные на временную шкалу, будут просматриваться на смартфоне.
Несмотря на доступ с мобильного устройства, эти слайды отображаются в виде макета для ПК, поэтому это очень неудобно.
Итак, я сделал сайт, который позволяет вам удобно просматривать Speaker Deck в мобильной среде.
Мобильная колонка: https://mspeakerdeck.com/
Это видно только в мобильной версии. Если доступ кроме мобильного, редирект на исходную страницу.
Попробуйте получить доступ к https://mspeakerdeck.com/qrush/the-graphql-way-a-new-path-for-json-apis на своем мобильном телефоне.
Как пользоваться
(1) Доступ к странице с презентационными материалами Speaker Deck
(2) Добавьте m к начальным буквам Speakerdeck.com в домене.
(3) Это будет оптимальная компоновка для мобильной среды.
Короче,
https://speakerdeck.com/qrush/the-graphql-way-a-new-path-for-json-apis
↓ Добавляйте только m в заголовок домена.
https://mspeakerdeck.com/qrush/the-graphql-way-a-new-path-for-json-apis
Это все!
Затем это отображается так.
Как это работает
Эта служба работает с таким потоком.
(1) Сначала зайдите на https://mspeakerdeck.com/ ‹user-name› / ‹slide-name›
(2) Будет отображаться страница SPA, созданная Nuxt.js, работающей на Firebase Hosting.
(3) Проанализируйте URL, чтобы получить ‹имя пользователя› и ‹название слайда›.
(4) Отправить запрос в Облачные функции с необходимыми параметрами
(5) Cloud Functions получит доступ к Speaker Deck и получит необходимую информацию.
(6) Создайте и отобразите URL-адрес изображения слайда, используя полученную информацию.
Некоторые технические моменты
■ Используйте динамическую маршрутизацию с Firebase Hosting
При запуске Nuxt.js с хостингом Firebase настройка по умолчанию не поддерживает динамическую маршрутизацию.
Чтобы избежать этого, необходимо было добавить следующее описание в nuxt.config.js Nuxt.js.
{ generate: { fallback: true, }, router: { fallback: true, }, }
■ Найти последний слайд
На странице Speaker Deck нет информации об общем количестве слайдов.
Итак, я не знаю, сколько листов презентационных материалов являются окончательными.
Чтобы решить эту проблему, некоторые изображения слайдов предварительно загружаются и распознаются как количество изображений, ответ которых был 404, как последний слайд.
Конкретно это такой код.
// Find out total slide count by checking response of each imgs const img = new Image(); img.onerror = () => { vm.slideCount = id - 1; } img.src = baseURL + id + ext;
■ Запретить масштабирование двойным нажатием
«User-scalable = no» был признан недействительным в iOS 10.
Таким образом, если вы дважды нажмете кнопку на терминале с iOS 10 или более поздней версии, она будет увеличена.
Чтобы предотвратить это, я установил прослушиватель событий на событие touchmove и отключил двойное касание.
Конкретно это такой код.
containerElement.addEventListener('touchmove', (e) => { e.preventDefault() }, false);
■ Кэшировать ответ Cloud Functions в CDN
Ответ Cloud Functions можно кэшировать в Firebase Hosting.
https://firebase.google.com/docs/hosting/functions#managing_cache_behavior
Конкретно я просто добавил такой код.
res.set('Cache-Control', 'public, max-age=300, s-maxage=600');
Отказ от ответственности
Наконец, этот сервис является неофициальным сервисом Speaker Deck.
В частности, URL-адрес слайда использует URL-адрес изображения Speaker Deck в качестве прямой ссылки.
Это неуместные орудия.
Если GitHub Inc. свяжется со мной, чтобы немедленно остановить эту службу, мы немедленно ответим.
Исходники здесь.
«YuheiNakasaka/speakerdeck-gcf» — это репозиторий облачных функций.
«YuheiNakasaka/speakerdeck-mobile» — репозиторий внешнего интерфейса веб-сайта.