24.项目 1-博客前端:封装库--透明度渐变

学习要点:

1.问题所在
2.设置代码

本节课,我们接着运动动画再来扩展一下另一个形式的动画,透明度渐变动画。

一.问题所在

如果单独做一个方法来实现匀速渐变和缓冲渐变,问题不是很大。但如果直接在 animate
方法扩展就需要注意一些问题。

二.设置代码

1.创建透明度渐进动画
如果单独创建一个方法来处理透明度的渐进动画,我们可以复制 animate 方法,把长度
匀速或缓冲改成渐进的匀速和缓冲即可。但如果还是要封装到 animate 进行调用,则需要做
些判断。

//添加一个渐进动画的属性
var attr = obj['attr'] == 'x' ? 'left' : obj['attr'] == 'y' ? 'top' :
obj['attr'] == 'w' ? 'width' : obj['attr'] == 'h' ? 'height' :
obj['attr'] == 'o' ? 'opacity' : 'left';

PS:由于 opacity:0.3 属性 IE 不支持,需要 IE 专用的 filter:alpha(opacity=30),而需要进
行小数处理,这样导致我们的 getStyle()获取 CSS 内置的 parseInt 直接截掉了小数后的数字,
所以,我们需要重新改写 getStyle(),并且查询之前使用 getStyle()的地方,修改一下。

2.渐进动画也分匀速和缓冲,缓冲用的多,默认。
if (attr == 'opacity') {
var temp = parseFloat(getStyle(element, attr)) * 100;
if (step == 0) {
setOpacity();
} else if (step > 0 && Math.abs(temp - target) <= step) {
setOpacity();
} else if (step < 0 && (temp - target) <= Math.abs(step)) {
setOpacity();
} else {
element.style.filter = 'alpha(opacity='+ parseInt(temp + step) +')';
element.style.opacity = parseInt(temp + step) / 100;
}
}
function setOpacity() {
element.style.filter = 'alpha(opacity='+ target +')';
element.style.opacity = target / 100;
clearInterval(timer);
}

PS:要注意 parseInt(temp + step)的用途,因为计算机对小数经常不敏感,需要取整操作,
不然可能会造成渐变闪烁问题。

3.对于透明度独有或运动独有的,要分别判断,否则会混在一起。
if (attr != 'opacity') element.style[attr] = start + 'px'; //px 像素是运动独有的
//在缓冲上,opacity 采用 parseFloat,运动采用 parseInt
if (type == 'buffer') {
var parse = attr == 'opacity' ? (target - parseFloat(getStyle(element, attr) * 100)) :
(target - parseInt(getStyle(element, attr)));
var temp = parse / speed;
step = step > 0 ? Math.ceil(temp) : Math.floor(temp);
}

感谢收看本次教程!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、属性选择器:id选择器 # 通过id 来选择类名选择器 . 通过类名来选择属性选择器 ...
    Yuann阅读 1,795评论 0 7
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 29,084评论 1 45
  • 导语: 运动框架的实现思路运动,其实就是在一段时间内改变left、right、width、height、opaci...
    逍遥至尊灬寳阅读 2,196评论 0 9
  • 这些天用空余时间回顾和整理了自己刚开始从事前端之时,跟着慕课网上Vivian老师封装的运动框架 move.js....
    TouchMe丶阅读 317评论 0 4
  • “医生,有没有缓解的法子?” “太晚了,你现在只能吃些止痛的药了,过两天…过两天再来观察一下吧。” 他...
    江之岛上阅读 373评论 0 0

友情链接更多精彩内容