forked from adactio/FitText.js
-
Notifications
You must be signed in to change notification settings - Fork 3
/
fittext.js
81 lines (68 loc) · 2.02 KB
/
fittext.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/*!
* FitText-UMD
*
* Copyright 2011, Dave Rupert http://daverupert.com
* Released under the WTFPL license
* http://sam.zoy.org/wtfpl/
* Modified by Slawomir Kolodziej http://slawekk.info
* Modified by Peace Chen to support modules
*
* Date: Tue Jan 12 2016 10:03:36 GMT-0600 (CST)
*/
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define([], factory);
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory();
} else {
// Browser globals (root is window)
root.fitText = factory();
}
}(this, function() {
var css = function(el, prop) {
return getComputedStyle ? getComputedStyle(el).getPropertyValue(prop) : el.currentStyle[prop];
};
var addEvent = function(el, type, fn) {
if (el.addEventListener)
el.addEventListener(type, fn, false);
else
el.attachEvent('on' + type, fn);
};
var extend = function(obj, ext) {
for (var key in ext)
if (ext.hasOwnProperty(key))
obj[key] = ext[key];
return obj;
};
var fitText = function(el, kompressor, options) {
var settings = extend({
'minFontSize': -1 / 0,
'maxFontSize': 1 / 0
}, options);
var fit = function(el) {
var compressor = kompressor || 1;
var resizer = function() {
el.style.fontSize = Math.max(Math.min(el.clientWidth / (compressor * 10), parseFloat(settings.maxFontSize)), parseFloat(settings.minFontSize)) + 'px';
};
// Call once to set.
resizer();
// Bind events
// If you have any js library which support Events, replace this part
// and remove addEvent function (or use original jQuery version)
// Candidate: http://marcj.github.io/css-element-queries/
addEvent(window, 'resize', resizer);
};
if (el.length)
for (var i = 0; i < el.length; i++)
fit(el[i]);
else
fit(el);
// return set of elements
return el;
};
return fitText;
}));