JS实现css属性动画效果

html代码

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>css属性运动框架</title><style>body,div{margin: 0;padding: 0;}ul,li{list-style: none;}ul li{width: 200px;height: 100px;background: yellowgreen;margin-bottom: 20px;filter:alpha(opacity:30);opacity: 0.3;border:4px solid #666666;}</style><script src="js/move.js"></script><script>window.onload=function(){var Li1=document.getElementById('li1');var Li2=document.getElementById('li2');var Li3=document.getElementById('li3');var Li4=document.getElementById('li4');var Li5=document.getElementById('li5');Li1.onmouseover=function(){startMove(this,{height:200});}Li1.onmouseout=function(){startMove(this,{height:100});}Li2.onmouseover=function(){startMove(this,{width:400});}Li2.onmouseout=function(){startMove(this,{width:200});}Li3.onmouseover=function(){startMove(this,{opacity:100});}Li3.onmouseout=function(){startMove(this,{opacity:30});}Li4.onmouseover=function(){startMove(Li4,{width:400},function(){startMove(Li4,{height:200},function(){startMove(Li4,{opacity:100},function(){});});});}Li4.onmouseout=function(){startMove(Li4,{opacity:30},function(){startMove(Li4,{height:100},function(){startMove(Li4,{width:200});});});}Li5.onmouseover=function(){startMove(Li5,{width:400,height:200,opacity:100});}Li5.onmouseout=function(){startMove(Li5,{width:200,height:100,opacity:30});}            }</script></head><body><ul><li id="li1">高动画</li><li id="li2">宽动画</li><li id="li3">透明度动画</li><li id='li4'>高宽透明度链式动画</li><li id='li5'>高宽透明度同时动画</li></ul></body>
</html>

引入的JS代码,运动框架move.js

//运动
//startMove(obj,{attr1:itarget1,attr2:itarget2},fn)
function startMove(obj,json,fn) {clearInterval(obj.timer);obj.timer = setInterval(function() {var flag=true;//标杆,假设所有运动都达到了目标值for(var attr in json){//1.去当前的值var icur = 0;if(attr == 'opacity') {icur = Math.round(parseFloat(getStyle(obj,attr)) * 100); //parseFloat获取小数.Math.round四舍五入} else {icur = parseInt(getStyle(obj, attr)); //parseInt获取整数}//2.算速度var speed = (json[attr] - icur) / 8;speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);//3.检测属性动画是否全部达到目标值if(icur !== json[attr]) {flag=false;//如果不是所有的动画都达到目标值,标杆设为false}        if(attr == 'opacity') {obj.style.filter = 'alpha(opacity:' + (icur + speed) + ')';obj.style.opacity = (icur + speed) / 100;}else {obj.style[attr] = icur + speed + 'px';}}//在动画结束的时候检测是否有回调函数,如果检测到有回调函数,执行if(flag){clearInterval(obj.timer);if(fn){fn();}}}, 30)}//获取对象属性function getStyle(obj,attr){if(obj.currentStyle){return obj.currentStyle[attr];//IE}else{return getComputedStyle(obj,false)[attr];//火狐 chrome}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256987.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习笔记(24):Python网络编程并发编程-进程与线程的区别

立即学习:https://edu.csdn.net/course/play/24458/296438?utm_sourceblogtoedu 线程与进程的区别&#xff1a; 1.消耗区别&#xff1a;进程>线程 1&#xff09;进程运行结果 #进程运行 from multiprocessing import Process def task(name):print("我是%s"%na…

Codeforces Beta Round #1

A /*************************************************************************> File Name: A.cpp> Author: opas_chenxin> Mail: 1017370773qq.com > Created Time: 2016年05月06日 星期五 02时22分23秒 ************************************************…

进程控制块PCB结构体 task_struct 描述

进程控制块&#xff0c;英文名&#xff08;Processing Control Block&#xff09;&#xff0c;简称 PCB 。 进程控制块是系统为了管理进程设置的一个专门的数据结构&#xff0c;主要表示进程状态。 每一个进程都对应一个PCB来维护进程相关的信息&#xff1b; 在Linux中&#xf…

学习笔记(25):Python网络编程并发编程-Thread其他属性和守护线程

立即学习:https://edu.csdn.net/course/play/24458/296440?utm_sourceblogtoedu 1.Thread其他的属性 CurrentThread().getName():获得当前线程的名字 t.is_Alive:判断线程是否还在运行 t.join():等待线程运行结束再执行join后面的代码 t.setName("name"):为线程…

学习笔记(26):Python网络编程并发编程-GIL与自定义互斥锁的区别

立即学习:https://edu.csdn.net/course/play/24458/296443?utm_sourceblogtoedu 1.GIL的基本概念 答&#xff1a;GIL本质上就是一把锁&#xff0c;只是他是一把在python解释器上的锁 2.GIL与互斥锁的区别 答&#xff1a; 1&#xff09;GIL保护的是在python解释器上的参数&a…

2014年最具人气国外WORDPRESS主题

在国外&#xff0c;WrodPress这个博客系统极为受欢迎&#xff0c;使用WordPress来建站可以降低很多成本&#xff0c;另外还能以十分便宜的价格获得一个漂亮的WP网站模板。 今天向大家分享来自Themeforest 2014年最具人气的高级WrodPress主题&#xff0c;这些主题无论是设计还是…

开源视觉salm算法介绍

当前的开源SLAM方案 开源方案传感器形式地址链接MonoSLAM单目https://github.com/hanmekim/SceneLib2 PTAM单目 http://www.robots.ox.ac.uk/~gk/PTAM/ORB-SLAM 单目为主http://webdiis.unizar.es/~raulmur/orbslam/ORB-SLAM2单目https://github.com/raulmur/ORB_SLAM2LSD-SLAM…

学习笔记(27):Python网络编程并发编程-GIL与多线程

立即学习:https://edu.csdn.net/course/play/24458/296444?utm_sourceblogtoedu GIL与多线程 1.须知&#xff1a; 1&#xff09;cpu主要是为了提升计算性能&#xff0c;增加CPU提升计算性能&#xff1b; 2&#xff09;每一个CPU一旦遇到阻塞状态都会处于等待状态&#xff0c…

J0ker的CISSP之路:复习-Access Control(3)

本文同时发表在&#xff1a;[url]http://netsecurity.51cto.com/art/200801/63649.htm[/url] 在《J0ker的CISSP之路》系列的上一篇文章里&#xff0c;J0ker给大家介绍了访问控制CBK里面一些常见的破坏信息资产保密性的威胁类型&#xff0c;那么什么类型的威胁会破坏信息资产的完…

最优化课堂笔记01: 第一章 最优化的基本概念

第一章 最优化的基本概念 1.最优化求解的数学模型建立 2.例题&#xff08;考试第一大题&#xff1a;数学模型建立&#xff09; 解析&#xff1a;优化变量、目标函数&#xff08;一般取最小化&#xff09;、约束条件 注意&#xff1a; 1&#xff09;约束条件一般形式为&#…

EIGRP非等价负载均衡

1、等价负载均衡 当到达目的地有多条路径时&#xff0c;而有多条路径的metric值一样&#xff0c;这时就可以做等价负载均衡&#xff0c;让数据包均衡转发&#xff0c;不过要看该路由器的转发方式&#xff0c;如果是快速转发方式&#xff0c;这种方式无用&#xff08;本地产生的…

ubuntu100%快速安装搜狗输入法

1、进入搜狗官方网站&#xff0c;下载最新版本的for ubuntu输入法deb安装包 2、下载完成以后&#xff0c;进入下载好的文件目录&#xff0c;在空白处点击鼠标右键&#xff0c;打开终端 在终端窗口输入如下的指令开始安装搜狗拼音输入法。 #sudo dpkg -i sogoupinyin_2.2.0.01…

最优化课堂笔记02:第二章 线性规划

第二章 线性规划&#xff08;重点&#xff1a;单纯形法&#xff09; 1.线性规划问题及其模型&#xff08;重点&#xff1a;标准形式&#xff09; 题型&#xff1a;是否为标准形式&#xff1f;不是的话化为标准形式&#xff01; 1&#xff09;问题的提出 提出问题&#xff1…

客户端是选择Java Swing还是C# Winform

登录 | 注册 mentat的专栏 目录视图摘要视图订阅【专家问答】韦玮&#xff1a;Python基础编程实战专题 【知识库】Swift资源大集合 【公告】博客新皮肤上线啦 快来领福利&#xff1a;C币、机械键盘 客户端是选择Java Swing还是C# Winform 标签&#xff1a; swi…

学习笔记(28):Python网络编程并发编程-死锁与递归锁

立即学习:https://edu.csdn.net/course/play/24458/296445?utm_sourceblogtoedu 1.死锁&#xff08;Lock()的局限性&#xff09; 知识点&#xff1a;Lock(&#xff09;只能被获得&#xff08;acquire&#xff09;一次&#xff0c;要想再次获得必须释放后才能获得 1)死锁情况…

VScode 快速更改编码格式

1、view下的 Cmmand Palette 下的Change file Encoding simplifiled chinese GB2312

iostat

r/s: 每秒读取的请求数。 w/s: 每秒写入的请求数。 Avgqu-sz: 平均I/O队列长度 Await:平均每次设备I/O操作的等待时间(毫秒) Svctm:平均每次设置I/O操作的服务时间(毫秒)&#xff0c;Svctm越接近Await则说明等待时间少 %util:表示设备的繁忙程度&#xff0c;80%表示设备设备已经…

学习笔记(29):Python网络编程并发编程-信号量

立即学习:https://edu.csdn.net/course/play/24458/296446?utm_sourceblogtoedu 信号量&#xff08;了解&#xff09;&#xff1a;也是一把锁semaphore 1. from threading import Thread,Semaphore,currentThread import time#定义信号量(3把锁) sm Semaphore(3)def task()…

Ajax基础2

什么是服务器 网页浏览过程的分析 如何配置自己的服务器程序&#xff08;AMP&#xff09; 什么是Ajax 无刷新数据读取 异步&#xff0c;同步 Ajax基础(2) 使用Ajax 基础请求显示txt的文件 字符集编码 缓存&#xff0c;阻止缓存 动态数据&#xff0c;请求js或&#xff08;json&a…

学习笔记(30):Python网络编程并发编程-Event事件

立即学习:https://edu.csdn.net/course/play/24458/296447?utm_sourceblogtoedu threading.Event事件 1.概念及功能&#xff1a;主要是完成线程之间的通信&#xff0c;将另一个线程的运行状态通知给另一个线程 2.使用场景&#xff1a; 1&#xff09;客户端运行时等待服务器启…