jQuery плагин для увеличения/уменьшения шрифта
плагин умеет увеличивать уменьшать размер шрифта в заданном диапазоне и возвращать исходное значение
добавлено: опция - нераспространять параметры шрифта на указаннных потомков
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<script type="text/javascript" src="https://code.jquery.com/jquery-latest.min.js"></script>
<script>
$.fn.zoomtext = function (c) {
var a = {
min: 8, //минимальный размер шрифта - 0 без ограничения
max: 32, //максимальный размер шрифта - 0 без ограничения
increment: "+=1", //приращение или размер например "24px"
recovery: !1, //вернуть исходный размер
skip: !1 //нераспространять параметры шрифта на этих потомков - селектор потомков "*"
}, a = $.extend(a, c);
c = $("*", this).add(this);
c.each(function (a, c) {
var b = $(this).css("fontSize");
!$(this).data("fontSize") && $(this).data("fontSize", b).css("fontSize", b)
});
a.skip && (c = c.not($(a.skip, this)));
return c.each(function (c, d) {
var b = $(this).css("fontSize"),
b = $("<div/>", {
css: {
fontSize: b
}
}).css("fontSize", a.increment).css("fontSize");
a.max && parseFloat(b) > a.max && (b = a.max);
a.min && parseFloat(b) < a.min && (b = a.min);
a.recovery && (b = $(this).data("fontSize"));
$(this).css({
fontSize: b
})
})
};
$(function()
{
$('#increase').click(function(event)
{event.preventDefault();
$('#content').zoomtext({increment: "+=1"});
}
);
$('#reset').click(function(event)
{event.preventDefault();
$('#content').zoomtext({recovery: true});
}
);
$('#decrease').click(function(event)
{event.preventDefault();
$('#content').zoomtext({increment: "-=3"});
}
);
$('#font24').click(function(event)
{event.preventDefault();
$('#content').zoomtext({increment: "24px"});
}
);
$('#increase_мах').click(function(event)
{event.preventDefault()
$('#content').zoomtext({increment: "+=5", max : 0,skip : '*'});
}
);
}
)
</script>
</head>
<body>
<p id="content">
Бесплатный гороскоп на сегодня 08.08.2011 для Тельца:<br /><a href="#">123456</a>
Для всех Тельцов это день максимальной активности, время, когда стоит быть энергичными в самых обыденных делах, придавая им цельность и гармонию. Не стоит упускать возможности воспользоваться чьими-то предложениями, которые могут оказаться весьма выгодными и полезными. Контакты с коллегами по работе или родственниками у Тельцов будут теплыми, приносящими успех и удовлетворение. Правда, при этом не стоит проявлять чрезмерной принципиальности в вопросах, касающихся профессиональной деятельности, так как это чревато возможными конфликтами.
</p>
<ul id="zoom">
<li><a href="#zoom" id="increase" title="увеличить шрифт">увеличить шрифт</a></li>
<li><a href="#zoom" id="reset" title="сбросить шрифт">сбросить шрифт</a></li>
<li><a href="#zoom" id="decrease" title="уменьшить шрифт">уменьшить шрифт</a></li>
<li><a href="#zoom" id="font24" title="шрифт = 24">шрифт = 24px</a></li>
<li><a href="#zoom" id="increase_мах" title="увеличить шрифт">увеличить шрифт без ограничения исключая потомков</a></li>
</ul>
</script>
</body>
</html>
P.S. конечно это можно сделать и без плагина ))) |
Спасибо за решение :) (плюсануть не смог, уже ранее плюсовал)
Но возник вопрос, как быть с записью в куки, чтобы размер шрифтов сохранялся при переходе по страницам? Учитывая момент, что хранить придется информацию для страниц, где много элементов у которых был увеличен текст. |
Сохранение установленного размера шрифта
Bravo,
Вариант с сохранением ... плагин добавлен параметр conserve: !0 //сохранять установленное значение...инициализация сохранённого строки 46-53
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$.fn.zoomtext = function (c) {
var a = {
min: 8, //минимальный размер шрифта - 0 без ограничения
max: 32, //максимальный размер шрифта - 0 без ограничения
increment: "+=1", //приращение или размер например "24px"
recovery: !1, //вернуть исходный размер
skip: !1, //нераспространять параметры шрифта на этих потомков - селектор потомков "*"
conserve: !0 //сохранять установленное значение
}, a = $.extend(a, c);
c = $("*", this).add(this);
var sel = this.selector;
c.each(function (a, c) {
var b = $(this).css("fontSize");
!$(this).data("fontSize") && $(this).data("fontSize", b).css("fontSize", b)
});
a.skip && (c = c.not($(a.skip, this)));
var old = JSON.parse(localStorage.getItem("elementsFont")) || {};
return c.each(function (c, d) {
var b = $(this).css("fontSize"),
b = $("<div/>", {
css: {
fontSize: b
}
}).css("fontSize", a.increment).css("fontSize");
a.max && parseFloat(b) > a.max && (b = a.max);
a.min && parseFloat(b) < a.min && (b = a.min);
a.recovery && (b = $(this).data("fontSize"));
a.conserve && (old[sel] = {
fontSize: b,
skip: a.skip
});
localStorage.setItem("elementsFont", JSON.stringify(old));
$(this).css({
fontSize: b
})
})
};
$(function () {
var old = JSON.parse(localStorage.getItem("elementsFont")) || {};
Object.keys(old).forEach(function (key) {
$(key).zoomtext({
increment: old[key].fontSize,
skip: old[key].skip,
conserve: false
});
});
$('#increase').click(function (event) {
event.preventDefault();
$('#content').zoomtext({
increment: "+=1"
});
});
$('#reset').click(function (event) {
event.preventDefault();
$('#content').zoomtext({
recovery: true
});
});
$('#decrease').click(function (event) {
event.preventDefault();
$('#content').zoomtext({
increment: "-=3"
});
});
$('#font24').click(function (event) {
event.preventDefault();
$('#content').zoomtext({
increment: "24px"
});
});
$('#increase_мах').click(function (event) {
event.preventDefault()
$('#content').zoomtext({
increment: "+=5",
max: 0,
skip: '*'
});
});
})
</script>
</head>
<body>
<p id="content">
Бесплатный гороскоп на сегодня 08.08.2011 для Тельца:<br /><a href="#">123456</a>
Для всех Тельцов это день максимальной активности, время, когда стоит быть энергичными в самых обыденных делах, придавая им цельность и гармонию. Не стоит упускать возможности воспользоваться чьими-то предложениями, которые могут оказаться весьма выгодными и полезными. Контакты с коллегами по работе или родственниками у Тельцов будут теплыми, приносящими успех и удовлетворение. Правда, при этом не стоит проявлять чрезмерной принципиальности в вопросах, касающихся профессиональной деятельности, так как это чревато возможными конфликтами.
</p>
<ul id="zoom">
<li><a href="#zoom" id="increase" title="увеличить шрифт">увеличить шрифт</a></li>
<li><a href="#zoom" id="reset" title="сбросить шрифт">сбросить шрифт</a></li>
<li><a href="#zoom" id="decrease" title="уменьшить шрифт">уменьшить шрифт</a></li>
<li><a href="#zoom" id="font24" title="шрифт = 24">шрифт = 24px</a></li>
<li><a href="#zoom" id="increase_мах" title="увеличить шрифт">увеличить шрифт без ограничения исключая потомков</a></li>
</ul>
</script>
</body>
</html>
|
Замечательно. Спасибо вам огромное. Вот только как сделать так, что бы увеличение было у отдельных элементов.
Например id="content" добавляю в нескольких блоках - увеличивается только первый |
qwe88,
id уникально !!! либо если совсем невмоготу то $('[id="content"]') но лучше класс для одинаковых блоков |
Попробовал у себя на сайте, скрипт работает отлично, однако значение line-height остаётся неизменным.
Можно как-то сделать чтоб вместе с font-size так же менялось значение line-height ? |
Radrigo,
Цитата:
|
Цитата:
line-height:normal работает:) |
В общем, скрипт работает, но когда добавляю id="content", например, в блок <div>, все eго стили (прописанные у меня во внешней таблице) летят к чёрту.
Что я делаю не так? |
Kopegoro,
нет кода нет совета - делайте макет - все стили лететь не могут меняется только размер шрифта |
Разобрался. Оказывается, был конфликт с другим плагином, где также присутствовал id="content". В вашем варианте изменил название id, и теперь всё работает. Спасибо!
|
рони,
Подкину свои пять копеек: 1. Если для сайта - нун делать с запоминанием для текущего юзера(для последущих страниц и входов), типично в куки для кроссбраузерности,иконка,- при наведении на иконку => появляется <input type="range"> , двигая который меняешь масштаб (как то костомизировал ползунок для идентичности во всех браузерах) С инпутом плагин сократиться до пяти строк( ибо в нем мон задать все параметры) |
Deff,
спасибо за идею но не по силам Цитата:
Цитата:
|
Немного изменил плагин - плагин применяю ко всей странице, а на ней присутствовали несколько размеров шрифтов. При загрузке из localstorage один размер применялся ко всем элементам. А это немного не устраивало :)
$.fn.zoomtext = function (c) {
var old = JSON.parse(localStorage.getItem("elementsFont")) || {};
var a = {
min: 8, // 0 - no limits
max: 42, // 0 - no limits
increment: 1, // increment
recovery: !1, // recovery old
skip: !1, // skip child (child selector - "*")
conserve: !0 // save to local storage
}, a = $.extend(a, c);
// the selector of the element
var sel = this.selector;
if (!a.recovery && old && old[sel] && old[sel].increment) {
a.increment = a.increment * old[sel].increment;
}
a.recovery && (a.increment = 1);
a.conserve && (old[sel] = {
skip: a.skip,
increment: a.increment
});
localStorage.setItem("elementsFont", JSON.stringify(old));
// the collection - element and its child
c = $("*", this).add(this);
// firstly save original font size for each elements in the collection if it has not yet
c.each(function (a, c) {
var b = $(this).css("fontSize");
!$(this).data("fontSize") && $(this).data("fontSize", b).css("fontSize", b)
});
// if skip then remove from collection
a.skip && (c = c.not($(a.skip, this)));
return c.each(function (c, d) {
var b = $(this).css("fontSize");
b = parseFloat(b) * a.increment + 'px';
//b = $("<div/>", {css: {fontSize: b}}).css("fontSize", a.increment).css("fontSize");
a.max && parseFloat(b) > a.max && (b = a.max);
a.min && parseFloat(b) < a.min && (b = a.min);
// if recovery then set original fontSize
a.recovery && (b = $(this).data("fontSize"));
$(this).css({
fontSize: b
})
})
};
var old = JSON.parse(localStorage.getItem("elementsFont")) || {};
Object.keys(old).forEach(function (key) {
$(key).zoomtext({
increment: old[key].increment,
skip: old[key].skip,
conserve: false
});
});
$(".font-sizer .reset").click(function (e) {
e.preventDefault();
$('body').zoomtext({
recovery: true
});
});
$(".font-sizer .plus").click(function (e) {
e.preventDefault();
$('body').zoomtext({increment: 1.1});
});
$(".font-sizer .minus").click(function (e) {
e.preventDefault();
$('body').zoomtext({increment: 0.9});
});
|
Исходный плагин (с вариантом сохранения размеров для всех страничек сайта) у меня работает, хотя, как Вы и сказали,
Цитата:
Цитата:
Я поменял ".font-sizer .plus" на "#increase" и так далее для всех трёх элементов (увеличения, уменьшения и сброса). Но при клике по ссылкам ничего не происходит. Возможно, я еще что-то не учел. Буду благодарен за помощь.
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$.fn.zoomtext = function (c) {
var old = JSON.parse(localStorage.getItem("elementsFont")) || {};
var a = {
min: 8, // 0 - no limits
max: 42, // 0 - no limits
increment: 1, // increment
recovery: !1, // recovery old
skip: !1, // skip child (child selector - "*")
conserve: !0 // save to local storage
}, a = $.extend(a, c);
// the selector of the element
var sel = this.selector;
if (!a.recovery && old && old[sel] && old[sel].increment) {
a.increment = a.increment * old[sel].increment;
}
a.recovery && (a.increment = 1);
a.conserve && (old[sel] = {
skip: a.skip,
increment: a.increment
});
localStorage.setItem("elementsFont", JSON.stringify(old));
// the collection - element and its child
c = $("*", this).add(this);
// firstly save original font size for each elements in the collection if it has not yet
c.each(function (a, c) {
var b = $(this).css("fontSize");
!$(this).data("fontSize") && $(this).data("fontSize", b).css("fontSize", b)
});
// if skip then remove from collection
a.skip && (c = c.not($(a.skip, this)));
return c.each(function (c, d) {
var b = $(this).css("fontSize");
b = parseFloat(b) * a.increment + 'px';
//b = $("<div/>", {css: {fontSize: b}}).css("fontSize", a.increment).css("fontSize");
a.max && parseFloat(b) > a.max && (b = a.max);
a.min && parseFloat(b) < a.min && (b = a.min);
// if recovery then set original fontSize
a.recovery && (b = $(this).data("fontSize"));
$(this).css({
fontSize: b
})
})
};
var old = JSON.parse(localStorage.getItem("elementsFont")) || {};
Object.keys(old).forEach(function (key) {
$(key).zoomtext({
increment: old[key].increment,
skip: old[key].skip,
conserve: false
});
});
$("#reset").click(function (e) {
e.preventDefault();
$('body').zoomtext({
recovery: true
});
});
$("#increase").click(function (e) {
e.preventDefault();
$('body').zoomtext({increment: 1.1});
});
$("#decrease").click(function (e) {
e.preventDefault();
$('body').zoomtext({increment: 0.9});
});
</script>
</head>
<body>
<p id="content">
Бесплатный гороскоп на сегодня 08.08.2011 для Тельца:<br /><a href="#">123456</a>
Для всех Тельцов это день максимальной активности, время, когда стоит быть энергичными в самых обыденных делах, придавая им цельность и гармонию. Не стоит упускать возможности воспользоваться чьими-то предложениями, которые могут оказаться весьма выгодными и полезными. Контакты с коллегами по работе или родственниками у Тельцов будут теплыми, приносящими успех и удовлетворение. Правда, при этом не стоит проявлять чрезмерной принципиальности в вопросах, касающихся профессиональной деятельности, так как это чревато возможными конфликтами.
</p>
<ul id="zoom">
<li><a href="#zoom" id="increase" title="увеличить шрифт">увеличить шрифт</a></li>
<li><a href="#zoom" id="reset" title="сбросить шрифт">сбросить шрифт</a></li>
<li><a href="#zoom" id="decrease" title="уменьшить шрифт">уменьшить шрифт</a></li>
</ul>
</script>
</body>
</html>
|
Vectorok,
клики обернуть в ready
$(function() {
$("#reset").click(function (e) {
e.preventDefault();
$('body').zoomtext({
recovery: true
});
});
$("#increase").click(function (e) {
e.preventDefault();
$('body').zoomtext({increment: 1.1});
});
$("#decrease").click(function (e) {
e.preventDefault();
$('body').zoomtext({increment: 0.9});
});
});
|
Цитата:
Но, к сожалению, не сохраняется настройка размера шрифта при преходе на другую страницу. Чтобы проверить это, достаточно сделать копию страницы с кодом, и в исходной сделать ссылку на копию. |
Vectorok,
$(function() { --- перенесите всё сюда, а не только клики |
Цитата:
Ну да, в принципе у Вас так и было в изначальном коде. И вроде бы я это и пробовал сделать в самом начале (еще до того, как написал первое сообщение). Но видимо тогда что-то другое не поменял, и поэтому не работало. Честно скажу, пока мало понимаю jQuery, но хочу разобраться. |
А мои разборки с jQuery, закончились полным не пониманием, зачем нам нужны старые браузеры? Вот просто ведь есть (style.fontSize) и делай что пожелаешь, На пример, меняешь окно и размер шрифта, перегружайте после изменений.
<html>
<head>
<script> r=document.all;
function pysk(){
var x=1280/902;
var wi=parseInt(document.body.clientWidth);
var he=parseInt(document.body.clientHeight);
var y=(wi/he);
if (x>=y){
r.fon.style.width=wi+"px";
r.fon.style.height=wi/x;}else{r.fon.style.height=he+"px";
r.fon.style.width=he*x;}
wid=parseInt(r.fon.style.width);
razmer=((100/1280)*wid)+"%";
r.fon.style.fontSize=razmer;
}</script>
</head>
<body onload=pysk()>
<div id="fon" style=" background: #000;
position: absolute; top:0px; left:0px; font-saiz:100%; color:#fff; "height:902px;
width:1280px">Зачем огород? Любая библиотека тормоз, мой вывод. Но я сильно сомневаюсь
в своих выводах. О явескрипт знаю уже третий год, однако возраст, дитё сегодня только 62
исполнилось.
</div>
</body>
</html>
|
| Часовой пояс GMT +3, время: 16:37. |