JavaScript运动框架 链式运动到完美运动(五)
发布时间 - 2026-01-11 01:10:18 点击率:次基于前几篇的运动框架基础,本文主要讲解一下链式运动,就是运动完后接着再运动,比如很多网站中,一个方框的出现和退出:出现时先变宽再变高,退出时先变矮再变窄退出!
之前的模型是:

startMove(obj, json);
现在改为:
startMove(obj, json, fn);
也就是在第一次运动结束的时候执行fn(); fn是传过来的一个参数,这个参数是个函数,定时器清理之后手动运行fn();如果想采用链式运动,那就是在fn中再调用startMove(obj, json, fn),再在里面的fn中调用startMove(obj, json, fn),可以一直玩下去
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>运动框架(五):链式运动到完美运动</title>
<style type="text/css">
div {
width: 100px;
height: 100px;
background: orange;
margin: 10px;
float: left;
}
</style>
</head>
<body>
<div id="div1"></div>
<script type="text/javascript">
var oDiv = document.getElementById('div1');
oDiv.onmouseover = function() {
startMove(oDiv, {width:300,opacity:30}, function() {
startMove(oDiv, {height:500});
});
};
oDiv.onmouseout = function() {
startMove(oDiv, {height:100}, function() {
startMove(oDiv, {width:100,opacity:100});
})
};
function getStyle(obj, attr) {
if (obj.currentStyle) {
return obj.currentStyle[attr];
} else {
return getComputedStyle(obj, null)[attr];
}
}
function startMove(obj, json, fn) {
clearInterval(obj.timer);
obj.timer = setInterval(function() {
var bStop = true;
for (var attr in json) {
var cur = 0;
if (attr === 'opacity') {
cur = Math.round(parseFloat(getStyle(obj, attr)) * 100);
} else {
cur = parseInt(getStyle(obj, attr));
}
if (cur != json[attr]) {
bStop = false;
}
var speed = (json[attr] - cur)/10;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
cur += speed;
if (attr === 'opacity') {
obj.style.filter = 'alpha(opacity:' + cur + ')';
obj.style.opacity = cur/100;
} else {
obj.style[attr] = cur + 'px';
}
}
if (bStop) {
clearInterval(obj.timer);
if (fn) fn();
}
}, 30);
}
</script>
</body>
</html>
最后提取出来的完美运动框架如下,motionFrame.js:
function getStyle(obj, attr) {
if (obj.currentStyle) {
return obj.currentStyle[attr];
} else {
return getComputedStyle(obj, null)[attr];
}
}
function startMove(obj, json, fn) {
clearInterval(obj.timer);
obj.timer = setInterval(function() {
var bStop = true;
for (var attr in json) {
var cur = 0;
if (attr === 'opacity') {
cur = Math.round(parseFloat(getStyle(obj, attr)) * 100);
} else {
cur = parseInt(getStyle(obj, attr));
}
if (cur != json[attr]) {
bStop = false;
}
var speed = (json[attr] - cur)/10;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
cur += speed;
if (attr === 'opacity') {
obj.style.filter = 'alpha(opacity:' + cur + ')';
obj.style.opacity = cur/100;
} else {
obj.style[attr] = cur + 'px';
}
}
if (bStop) {
clearInterval(obj.timer);
if (fn) fn();
}
}, 30);
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# js
# 运动框架
# 链式运动
# 完美运动
# JS多物体 任意值 链式 缓冲运动
# Js实现简单的小球运动特效
# js运动动画的八个知识点
# javascript实现10个球随机运动、碰撞实例详解
# JS实现匀速运动的代码实例
# 使用JavaScript 实现对象 匀速/变速运动的方法
# js实现缓冲运动效果的方法
# JavaScript中的匀速运动和变速(缓冲)运动详细介绍
# Javascript实现重力弹跳拖拽运动效果示例
# javascript动画之圆形运动
# 环绕鼠标运动作小球
# Javascript模拟加速运动与减速运动代码分享
# JS运动特效之链式运动分析
# 链式
# 是在
# 是个
# 那就
# 也就
# 在里面
# 现时
# 完后
# 大家多多
# 几篇
# 中再
# 变窄
# 变宽
# brush
# xhtml
# DOCTYPE
# lt
# false
# gt
# 一直玩
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
如何快速查询网站的真实建站时间?
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
魔毅自助建站系统:模板定制与SEO优化一键生成指南
香港服务器租用费用高吗?如何避免常见误区?
如何快速重置建站主机并恢复默认配置?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
公司网站制作价格怎么算,公司办个官网需要多少钱?
Android滚轮选择时间控件使用详解
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
如何用5美元大硬盘VPS安全高效搭建个人网站?
Laravel如何实现API版本控制_Laravel版本化API设计方案
重庆市网站制作公司,重庆招聘网站哪个好?
JS中对数组元素进行增删改移的方法总结
EditPlus中的正则表达式 实战(1)
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
如何快速生成橙子建站落地页链接?
如何自定义建站之星网站的导航菜单样式?
Laravel如何创建自定义Facades?(详细步骤)
无锡营销型网站制作公司,无锡网选车牌流程?
高防服务器租用如何选择配置与防御等级?
如何为不同团队 ID 动态生成多个独立按钮
b2c电商网站制作流程,b2c水平综合的电商平台?
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
网站页面设计需要考虑到这些问题
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
详解Oracle修改字段类型方法总结
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
北京企业网站设计制作公司,北京铁路集团官方网站?
Laravel如何实现API资源集合?(Resource Collection教程)
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
iOS验证手机号的正则表达式
如何用虚拟主机快速搭建网站?详细步骤解析
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
高端云建站费用究竟需要多少预算?
如何实现建站之星域名转发设置?
使用Dockerfile构建java web环境
iOS中将个别页面强制横屏其他页面竖屏
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
如何用景安虚拟主机手机版绑定域名建站?
Laravel如何实现API速率限制?(Rate Limiting教程)
如何在云虚拟主机上快速搭建个人网站?
Firefox Developer Edition开发者版本入口
微信小程序 input输入框控件详解及实例(多种示例)
历史网站制作软件,华为如何找回被删除的网站?
韩国服务器如何优化跨境访问实现高效连接?
黑客如何通过漏洞一步步攻陷网站服务器?

