动画封装四:用json实现多条样式的缓动运动

2024-05-01 07:48

本文主要是介绍动画封装四:用json实现多条样式的缓动运动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基础样式:

/* 用通配符清除默认样式减少代码量,实际项目应对用到的标签清除默认样式*/ 
*{margin: 0;padding: 0;list-style: none;outline: none;}
div{position: absolute;left: 0;width: 200px;height: 200px;line-height: 200px;background-color: pink;font-size:80px;text-align:center;}
html 骨架:

<button id='btn'>运动</button>
<div id='div'>变</div>
javascript 结构:

var div = document.getElementById('div');
var json = {'width':50,'height':50,'line-height':50,'left':200,'top':200,'opacity':60,'zIndex':2,'font-size':16};
btn.onclick =  function () {animate(div,json,over);
}
// 这里定义一个回调函数
function over() {alert('当前动画执行完毕');
}/*** 用json实现多条样式的缓动运动函数封装* @param  {[type]}   obj       运动对象* @param  {[type]}   json      目标距离* @param  {Function} fn        回调函数* @return {[type]}             null*/
function animate(obj,json,fn) {clearInterval(obj.timer);var step = 0;var current = 0; // 当前值obj.timer = setInterval(function() {var flag = true;for(var k in json) {// 对 opacity 初始化处理,乘上100来参与缓动运算if( k == 'opacity' ) {current = Math.round( getStyle(obj,k) * 100 ) ;if(getStyle(obj,k) == 0) {json[k] *=100;}} else if( k == 'z-index' ||  k == 'zIndex') {// 如果得不到z-index ,那么赋0处理current = getStyle(obj,k) || 0;} else {// 把字符串变成纯数字 若是top,left等没定义默认给0current = parseInt( getStyle(obj,k) ) || 0;}step = (json[k] - current) / 10;step = step > 0 ? Math.ceil(step) : Math.floor(step);current += step;// 对 opacity 进行样式处理if( k == 'opacity' ) {// 把不透明度除100 还原 ,并赋值。obj.style[k] = current / 100 ;obj.style['filter'] = 'alpha(opacity='+ current / 100 +')';} else if ( k == 'z-index' || k == 'zIndex' ) {current = json[k];// 直接变化,不需渐变obj.style.zIndex = json[k];} else {obj.style[k] = current + 'px';}if( current != json[k] ) {flag = false;}}if(flag) {clearInterval(obj.timer);if(fn) {fn();}}},10);
}// 得到对象的当前样式函数封装
function getStyle(obj,attr) {return obj.currentStyle?obj.currentStyle[attr]:window.getComputedStyle(obj,null)[attr]; 
}


这篇关于动画封装四:用json实现多条样式的缓动运动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/951105

相关文章

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

pandas中位数填充空值的实现示例

《pandas中位数填充空值的实现示例》中位数填充是一种简单而有效的方法,用于填充数据集中缺失的值,本文就来介绍一下pandas中位数填充空值的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是中位数填充?为什么选择中位数填充?示例数据结果分析完整代码总结在数据分析和机器学习过程中,处理缺失数

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转