Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.06.2018, 09:23
Аватар для madeas
Профессор
Отправить личное сообщение для madeas Посмотреть профиль Найти все сообщения от madeas
 
Регистрация: 13.04.2018
Сообщений: 232

Подгружать гугл шрифты через js
Всем привет!
Ковыряясь в канвасе, нашел интересную возможность подгружать любой шрифт с гугла.
Вот сам скрипт:
WebFontConfig = {
				google: { families: [ 'Ubuntu' ] },
				fontactive: function() {
					var block = document.getElementById("mscanvas");
					
					img.onload= function(){
						drawText();
					}

					function drawText() {
						ctx.font = "bold 94px Ubuntu";
						ctx.textAlign = 'center';
					}
				}
			};
			(function() {
			 var wf = document.createElement('script');
			 wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
				 '://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
			 wf.type = 'text/javascript';
			 wf.async = 'true';
			 var s = document.getElementsByTagName('script')[0];
			 s.parentNode.insertBefore(wf, s);
		   })();


Поскольку в js я еще новичок, возникает вопрос. Как упростить код и перенастроить скрипт на смену шрифта:
1. для всего body
2. для отдельного контейнера с идентификатором N

И еще вопрос. Если получится, то имеет ли смысл и место быть этой альтернативе? Знаешь название - вписал в скрипт и работаешь.

Последний раз редактировалось madeas, 14.06.2018 в 09:28.
Ответить с цитированием
  #2 (permalink)  
Старый 14.06.2018, 09:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

madeas,
прописать класс в css и после загрузки шрифта установить этот класс нужному элементу.
fontactive : function() {
   document.querySelector("body").classList.add("class")
}
Ответить с цитированием
  #3 (permalink)  
Старый 14.06.2018, 09:53
Аватар для madeas
Профессор
Отправить личное сообщение для madeas Посмотреть профиль Найти все сообщения от madeas
 
Регистрация: 13.04.2018
Сообщений: 232

рони,
так скрипт не прописывает это нигде... если не ошибаюсь. Собственно, идея и заключается в том, чтобы обойти все эти прописывания в стилях и встраивание конструкций типа link rel="stylesheet" и пр.
Если я правильно понял его работу, он просто берет всю библиотеку шрифтов и когда я указываю "google: { families: [ 'Ubuntu' ] }," он просто его вытаскивает и присваивает нужному мне контейнеру
Ответить с цитированием
  #4 (permalink)  
Старый 14.06.2018, 10:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

madeas,
не могу подсказать более, без css скрипт не работает, либо сами установите класс элементу через fontactive , либо подгрузите новый стиль через секцию urls
точнее тут
https://github.com/typekit/webfontloader
https://webformyself.com/zagruzka-ve...u-zagruzchika/
Ответить с цитированием
  #5 (permalink)  
Старый 14.06.2018, 10:12
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Вариант - непосредственная смена шрифта для всей страницы (можно и для любого элемента)

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>font-family</title>
  </style>
 </head> 
 <body> 
  <h1>Duis te feugifacilisi</h1>
  <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem 
  nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. 
  Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit 
  lobortis nisl ut aliquip ex ea commodo consequat.</p>
   <button id='chfont'>Смена шрифта</button>
   <script src="https://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js" type="text/javascript" async=""></script>
   <script>
          var body = document.querySelector('body');
    WebFontConfig = {
				google: { families: [ 'Tangerine','Inconsolata' ] },
				fontactive: function() {
                                      body.style.fontFamily = 'Tangerine';
				}
			};
 
        chfont.onclick = function() {
             var curFont = body.style.fontFamily;
             body.style.fontFamily = (curFont == 'Inconsolata')?'Tangerine':'Inconsolata';
        }
   </script>
 </body>
</html>

Последний раз редактировалось Dilettante_Pro, 14.06.2018 в 10:48.
Ответить с цитированием
  #6 (permalink)  
Старый 14.06.2018, 10:16
Аватар для madeas
Профессор
Отправить личное сообщение для madeas Посмотреть профиль Найти все сообщения от madeas
 
Регистрация: 13.04.2018
Сообщений: 232

Dilettante_Pro,
вы взяли пример знакомых браузеру шрифтов, а если взять гугл шрифт? Допустим Barlow, Playfair Display и Inconsolata. И лучше будет, если сделать не кнопку, а селектор. Так вы предлагаете один из двух возможных, а если их несколько?

Последний раз редактировалось madeas, 14.06.2018 в 10:19.
Ответить с цитированием
  #7 (permalink)  
Старый 14.06.2018, 10:45
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от madeas
а если взять гугл шрифт
Изменил пример на использование гугл шрифта.
Кнопка или селектор - это дело техники, не принципиально.
Ответить с цитированием
  #8 (permalink)  
Старый 14.06.2018, 11:11
Аватар для madeas
Профессор
Отправить личное сообщение для madeas Посмотреть профиль Найти все сообщения от madeas
 
Регистрация: 13.04.2018
Сообщений: 232

А теперь главный вопрос. Есть ли в этом смысл?)) Или лучше использовать просто импорт или ссылку на гугл, а в css прописывать font-family?
Ответить с цитированием
  #9 (permalink)  
Старый 14.06.2018, 11:25
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Вариант с селектором (селектор можно генерить и динамически - по массиву fams)
<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>font-family</title>
  </style>
 </head> 
 <body> 
  <h1>Duis te feugifacilisi</h1>
  <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem 
  nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. 
  Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit 
  lobortis nisl ut aliquip ex ea commodo consequat.</p>
   <select id='selfont'>
     <option disabled>Выберите шрифт</option>
     <option selected value='Tangerine'>Tangerine</option>
     <option value='Inconsolata'>Inconsolata</option>
     <option value='Eater'>Eater</option>
   </select>
   <script src="https://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js" type="text/javascript" async=""></script>
   <script>
          var body = document.querySelector('body')
           fams = [ 'Tangerine','Inconsolata','Eater' ];
    WebFontConfig = {
				google: { families: fams },
				fontactive: function() {
                                      body.style.fontFamily = 'Tangerine';
				}
			};
 
        selfont.onchange = function() {
              body.style.fontFamily = this.value;
        }
   </script>
 </body>
</html>
Ответить с цитированием
  #10 (permalink)  
Старый 14.06.2018, 11:31
Аватар для madeas
Профессор
Отправить личное сообщение для madeas Посмотреть профиль Найти все сообщения от madeas
 
Регистрация: 13.04.2018
Сообщений: 232

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод кликабельных изображений только через js как? panikajo Общие вопросы Javascript 4 07.12.2017 12:54
В браузере Firefox не работает JS определение города через Яндекс API homabesaba4 Firefox/Mozilla 0 02.11.2017 14:54
Таблицы через JS Fireyon Общие вопросы Javascript 1 19.10.2017 00:39
eMail через JS konstantinopol Общие вопросы Javascript 15 12.01.2015 10:06
Получение background-image через js в ie wondertalik Javascript под браузер 3 13.12.2014 19:34