html如何让字体变形,jquery实现字体变形特效-css字体变成圆形

1.[代码][JavaScript]代码

$.fn.circleType = function(options) {

var settings = {

dir: 1,

position: 'relative'

};

if (typeof($.fn.lettering) !== 'function') {

console.log('Lettering.js is required');

return;

}

return this.each(function () {

if (options) {

$.extend(settings, options);

}

var elem = this,

delta = (180 / Math.PI),

ch = parseInt($(elem).css('line-height'), 10),

fs = parseInt($(elem).css('font-size'), 10),

txt = elem.innerHTML.replace(/^\s+|\s+$/g, '').replace(/\s/g, ' '),

letters,

center;

elem.innerHTML = txt

$(elem).lettering();

elem.style.position = settings.position;

letters = elem.getElementsByTagName('span');

center = Math.floor(letters.length / 2)

var layout = function () {

var tw = 0,

i,

offset = 0,

minRadius,

origin,

innerRadius,

l, style, r, transform;

for (i = 0; i < letters.length; i++) {

tw += letters[i].offsetWidth;

}

minRadius = (tw / Math.PI) / 2 + ch;

if (settings.fluid && !settings.fitText) {

settings.radius = Math.max(elem.offsetWidth / 2, minRadius);

}

else if (!settings.radius) {

settings.radius = minRadius;

}

if (settings.dir === -1) {

origin = 'center ' + (-settings.radius + ch) / fs + 'em';

} else {

origin = 'center ' + settings.radius / fs + 'em';

}

innerRadius = settings.radius - ch;

for (i = 0; i < letters.length; i++) {

l = letters[i];

offset += l.offsetWidth / 2 / innerRadius * delta;

l.rot = offset;

offset += l.offsetWidth / 2 / innerRadius * delta;

}

for (i = 0; i < letters.length; i++) {

l = letters[i]

style = l.style

r = (-offset * settings.dir / 2) + l.rot * settings.dir

transform = 'rotate(' + r + 'deg)';

style.position = 'absolute';

style.left = '50%';

style.marginLeft = -(l.offsetWidth / 2) / fs + 'em';

style.webkitTransform = transform;

style.MozTransform = transform;

style.OTransform = transform;

style.msTransform = transform;

style.transform = transform;

style.webkitTransformOrigin = origin;

style.MozTransformOrigin = origin;

style.OTransformOrigin = origin;

style.msTransformOrigin = origin;

style.transformOrigin = origin;

if(settings.dir === -1) {

style.bottom = 0;

}

}

if (settings.fitText) {

if (typeof($.fn.fitText) !== 'function') {

console.log('FitText.js is required when using the fitText option');

} else {

$(elem).fitText();

$(window).resize(function () {

updateHeight();

});

}

}

updateHeight();

};

var getBounds = function (elem) {

var docElem = document.documentElement,

box = elem.getBoundingClientRect();

return {

top: box.top + window.pageYOffset - docElem.clientTop,

left: box.left + window.pageXOffset - docElem.clientLeft,

height: box.height

};

};

var updateHeight = function () {

var mid = getBounds(letters[center]),

first = getBounds(letters[0]),

h;

if (mid.top < first.top) {

h = first.top - mid.top + first.height;

} else {

h = mid.top - first.top + first.height;

}

elem.style.height = h + 'px';

}

if (settings.fluid && !settings.fitText) {

$(window).resize(function () {

layout();

});

}

if (document.readyState !== "complete") {

elem.style.visibility = 'hidden';

$(window).load(function () {

elem.style.visibility = 'visible';

layout();

});

} else {

layout();

}

});

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值