Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » JS+HTML: Изменение шрифта на странице, с запоминанием выбора

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую!
 
Есть такой интересный ява-скрипт для смены размера шрифта на странице — с запоминанием выбора в куки-файле (т.е. при переходе с неё на другие связанные страницы шрифт не изменится) —
 

Код:
 
<HTML>
<HEAD>
<TITLE>font</TITLE>
  <meta http-equiv="content-type" content="text/html; charset=windows-1251" />
  <link rel="stylesheet" href="_style.css" type="text/css" />
 
<style type="text/css">
#topline {
    margin: 0; padding: 0 1em;
    border: solid; border-width: 1px ;  
    text-align:right;  
    font-size:.87em; line-height:2em;  
    font-family:  "Trebuchet MS", Verdana,  Arial;  
    }
#topline a {
    font-weight: bold; border:0;
    }
#topline a:hover {  
    text-decoration:underline;  
    background-color: transparent;
    }    
#topline div#fontS {
    float: left;
    width:20em;
    text-align:left;
    position:relative;
    }
#topline div#fontS a {
    font-weight: normal;
    }
#topline div#fontS a:hover {
    text-decoration: none;
    }
#topline strong {
    border: 1px solid; padding: 0 2px;
    }
    
#topline span strong {
    cursor:pointer;
    }    
#topline span strong:hover {
    background:#eef; color:#039;
    }
#topline a span {
    position:absolute; top:1em; left:-3000em;
    display: block; width: 19.4em;  
    padding: .7em;    
    text-align: center;
    border: 1px solid; background: #fff;
    font-weight: normal; line-height: 1.2;  
    color: #777;
    z-index:200;
    }
#topline a:hover span {
    left:.3em;
    }
 
.kap0 #topline {
    background-color: #455678; color:#eee; border-color:#124; }
.kap0 #topline a, #topline a:hover  { color:#dee9ff !important; }
</style>
</HEAD>
<body id="top">
<div class="kap0">
    <div id="topline" >
      ein Web-Handbuch von <a href="http://www.univie.ac.at/rel_jap/start/konzept.htm#autor">Bernhard Scheid</a>
    </div>
</div>
 
 
 
 
текст вне таблицы<br>
текст вне таблицы<br>
текст вне таблицы<br>
текст вне таблицы<br>
текст вне таблицы<br>
текст вне таблицы<br>
текст вне таблицы<br>
текст вне таблицы<br>
 
 
 
 
<table cellspacing="0" cellpadding="0" width="100%" height="100%" border="0">
<tr><td>
текст в таблице<br>
текст в таблице<br>
текст в таблице<br>
текст в таблице<br>
текст в таблице<br>
текст в таблице<br>
текст в таблице<br>
текст в таблице<br>
</td>
</tr>
</table>
 
 
 
 
 
<script type="text/javascript">
/*
font-size
navigation-menu
*/
 
////////////////////////////////////////////////////
///           COOKIES fьr font-size             ////
//credits: PPK, www.quirksmode.org/js/cookies.html//
 
 
var fontGr = 12;
 
function setFont(size) {
  var date = new Date(); var days = 7;
  date.setTime(date.getTime()+(days*24*60*60*1000));
  var expires = "; expires="+date.toGMTString();
  document.cookie = "rjFont="+size+expires+"; path=/";
  checkFont();
  }
 
function checkFont() {
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf("rjFont=") == 0)  
          fontGr = c.substring(7,c.length); // 7 = 'rjFont='.length
    }
  fontGr = (!fontGr || fontGr==NaN)? 12 : (fontGr<6)? 6 : (fontGr>50)? 50 :fontGr;
  document.getElementById("top").style.fontSize = fontGr+"px";
  //document.getElementById("fontNow").innerHTML = fontGr;
  document.getElementById("q").innerHTML = fontGr + " px";
  }
 
fontA = "";
 
font = new Array (12, 14, 15, 16, 18, 20, 24);  
for (i=0; i<font.length;i++) {
  fontA +="<strong onclick='setFont("+font[i]+")'>"+font[i]+"</strong> ";
  }
 
if (navigator.cookieEnabled) {
  tpL = document.getElementById("topline");    
     
  fChanger = tpL.insertBefore(document.createElement('div'), tpL.firstChild);
  fChanger.id = "fontS";
  fChanger.innerHTML =  
    "<a onmouseover='showhideSpan(0)' onmouseout = 'showhideSpan(-2000)'>"+  
    "Schriftgr&ouml;&szlig;e <strong id='q'>15 px</strong> +/&minus;" +
    "<span id='ftSize' style=' left:-2000px; background: #fff'>"+fontA+"</span> </a>";
  checkFont();
  }
function showhideSpan(value) {
    document.getElementById("ftSize").style.left = value+"px";  
  }
</script>
 

 
Однако почему-то текстов, находящихся внутри таблиц, изменения не касаются. В чем может быть дело?

Всего записей: 1367 | Зарегистр. 05-04-2010 | Отправлено: 23:25 19-10-2014 | Исправлено: D1D1D1D, 23:33 19-10-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D
а правой кнопкой мыши и Inspect Element, а там посмотреть откуда применяется размер шрифта к данному элементу?

Всего записей: 15113 | Зарегистр. 20-09-2014 | Отправлено: 23:30 19-10-2014
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Без знания яваскрипт вряд ли это что-то даст. Судя по всему, там надо настроить обработку тегов table.

Всего записей: 1367 | Зарегистр. 05-04-2010 | Отправлено: 23:36 19-10-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D

Цитата:
Без знания яваскрипт вряд ли это что-то даст.

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

Всего записей: 15113 | Зарегистр. 20-09-2014 | Отправлено: 23:38 19-10-2014 | Исправлено: Mavrikii, 23:42 19-10-2014
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Кажется Вы правы, подумаю.
 
Добавлено:
Спасибо, кое-что наклюнулось: продублировал строку
 

Код:
document.getElementById("top").style.fontSize = fontGr+"px";

 
изменив айди на "top2" и затем присвоив его табличному td (вот так: <td id="top2">) — и вроде поехало)))

Всего записей: 1367 | Зарегистр. 05-04-2010 | Отправлено: 23:49 19-10-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D

Цитата:
и вроде поехало

ну.. это скорее заплатки.  
если бы воспроизвели свой код, к примеру, на jsfiddle.net - мог бы взглянуть.

Всего записей: 15113 | Зарегистр. 20-09-2014 | Отправлено: 00:06 20-10-2014
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скажите, а можно его настроить без необходимости прописывать ID для каждого элемента, чтобы изменения затрагивали элементы в том числе с фиксированными размерами?
 
Файл воспроизвёл, но он там в окне результатов не работает, видимо, потому что скрипт должен быть в конце HTML-файла. Вот, прошу.
 
Добавлено:
Выяснилось, что указание <td id="top2"> сработает только для первой ячейки, текст из последующих игнорируется.

Всего записей: 1367 | Зарегистр. 05-04-2010 | Отправлено: 00:23 20-10-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D

Цитата:
сработает только для первой ячейки, текст из последующих игнорируется.

конечно, остальные же не являются его детьми.
 

Цитата:
видимо, потому что скрипт должен быть в конце HTML-файла

все элементарно правится
http://jsfiddle.net/ro3bs6zh/1/
и работает.. в каком браузере не работает?

Всего записей: 15113 | Зарегистр. 20-09-2014 | Отправлено: 02:01 20-10-2014
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
Большое спасибо! Работает с дополнительными скопированными таблицами. Вот под практическую задачу что-то не идёт. Если не затруднит, есть ли шанс обрабатывать такую ситуацию? — http://jsfiddle.net/hdma/qr9gmtxt/
 
У обоих примеров, которые я на jsfiddle воспроизвёл, не выпадает окно выбора размеров, в отличие от Вашего.

Всего записей: 1367 | Зарегистр. 05-04-2010 | Отправлено: 10:58 20-10-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D

Цитата:
 не выпадает окно выбора размеров, в отличие от Вашего.

Да потому, слева наверху нужно указать куда вставлять указанный js код - No wrap in <body>
 
все работает, не вижу проблем.

Всего записей: 15113 | Зарегистр. 20-09-2014 | Отправлено: 11:03 20-10-2014 | Исправлено: Mavrikii, 11:04 20-10-2014
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
Точно, работает. Спасибо Вам!
 
Добавлено:
Однако любопытно, допустимо там как-то обрабатывать элементы с фиксированными размерами? Найдёте возможным взглянуть, вот здесь назначил стиль размеров для тегов td, p, div и tr — в 12 пикселей (в самом начале в окне для стилей).
 
Ещё интересует: судя по коду, там имеют место какие-то вычисления для cookie — 7 дней и т.д. Предусмотрена ли команда для сброса куки-файла сразу после закрытия окна, а не до тех пор (как сейчас) пока он не будет удалён или пройдёт 7 дней (если я правильно понял)?

Всего записей: 1367 | Зарегистр. 05-04-2010 | Отправлено: 20:00 20-10-2014 | Исправлено: D1D1D1D, 21:14 20-10-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D

Цитата:
Предусмотрена ли команда для сброса куки-файла сразу после закрытия окна

не выставлять дату "годности" куки. тогда она очистится как будет закрыто окно браузера (не таб).
 

Цитата:
 Найдёте возможным взглянуть, вот здесь назначил стиль размеров для тегов td, p, div и tr

и? для того, чтобы изменения сохранились, нужно жать кнопку Update или Fork.

Всего записей: 15113 | Зарегистр. 20-09-2014 | Отправлено: 21:38 20-10-2014 | Исправлено: Mavrikii, 21:38 20-10-2014
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 

Цитата:
и? для того, чтобы изменения сохранились, нужно жать кнопку Update или Fork.

Готово)).
 

Цитата:
не выставлять дату "годности" куки. тогда она очистится как будет закрыто окно браузера (не таб).

Большая просьба упразднить дату годности))

Всего записей: 1367 | Зарегистр. 05-04-2010 | Отправлено: 22:08 20-10-2014 | Исправлено: D1D1D1D, 22:08 20-10-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D

Цитата:
Большая просьба упразднить дату годности

попробовать убрать

Цитата:
var expires = "; expires="+date.toGMTString();

и

Цитата:
+expires

 

Цитата:
Готово)).  

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

Всего записей: 15113 | Зарегистр. 20-09-2014 | Отправлено: 22:12 20-10-2014 | Исправлено: Mavrikii, 22:12 20-10-2014
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Благодарю!

Всего записей: 1367 | Зарегистр. 05-04-2010 | Отправлено: 22:45 20-10-2014
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » JS+HTML: Изменение шрифта на странице, с запоминанием выбора


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru