Javascript 移动的海绵宝宝

article/2025/9/19 20:39:12

效果描述:

做一个简单的动画效果,刚刷新页面时,SpongeBob在页面的左上角位置,随着时间推移,他匀速向右移动,直到右侧抵达页面右侧停下来。

分析:

SpongeBob作为一张图片被存放在<img>里面,<img>又被存放在<div>里面。

图片运动的本质:盒子的位移变化

只变化一次还不够,因此需要setInterval这个定时器

位移,读取时使用offsetLeft属性,赋值时使用style.left属性

注意:

1. 前者无单位,后者有

2. 只有对于具有定位属性的元素,left属性才有意义

即,存放图片的div元素必须要加

position: absolute;

当然relative也能动起来,但是一般是父元素相对定位,子元素绝对定位 

停下来的本质:清除定时器

JS代码

    var div = document.querySelector('div');var inter = setInterval(callback,100);function callback(){if(div.offsetLeft>1500-div.clientWidth)clearInterval(inter);div.style.left = div.offsetLeft+10+'px';}    

那么,如果海绵宝宝的朋友派大星,章鱼哥也来了,是不是每个海洋生物都要重写一次上面的代码?

这时候可以选择把动画效果封装成一个函数moveRight(obj,speed),那个对象要移动,直接调用就可以了,参数1存放对象,参数2存放setInterval的间隔,值越大,移动速度越慢。

    function moveRight(obj,speed){var inter = setInterval(callback,speed);function callback(){if(obj.offsetLeft>1500-obj.clientWidth)clearInterval(inter);obj.style.left = obj.offsetLeft+10+'px';}    }moveRight(div,10);

但是如果每一次有一个新成员要移动,都要申请一个变量inter来存放定时器,会开辟大量的内存空间。这时候可以利用每个对象自带属性这个特征,来命名各自的定时器,即 将var inter 改成obj.inter

    function moveRight(obj,speed){obj.inter = setInterval(callback,speed);function callback(){if(obj.offsetLeft>1500-obj.clientWidth)clearInterval(obj.inter);obj.style.left = obj.offsetLeft+10+'px';}    }

现在再回头来开,一刷新页面元素就开始移动是很奇怪的。也就是说动画一般都会有一个触发事件。问题来了,如果某个元素的触发时间多次发生,岂不是开启了多个定时器?

答案是肯定的,对于这里封装的动画函数来说,开启多个定时器直接造成的结果就是海洋生物会移动得非常之快。如何解决?

其实只要保证定时器的唯一性即可,可以在函数的开头加上这么一句

clearInterval(obj.timer);


http://chatgpt.dhexx.cn/article/prNeylQ1.shtml

相关文章

JavaScript按键使盒子移动

设置一个box样式&#xff1a; #box{position: absolute;top: 200px;left: 200px;width: 100px;height: 100px;background-color: orange; }对onkeydown事件设置监听&#xff0c;根据按下的方向键改变CSS样式&#xff1a; document.onkeydownfunction(e){switch(e.keyCode){cas…

JavaScript 实现简单的移动和缓动的效果

目录 一、HTML布局 二、CSS布局 三、JavaScript代码——移动 四、JavaScript代码——缓动 五、完整代码 一、HTML布局 简单定义两个盒子&#xff0c;一个做移动效果、一个做缓动效果。 <div class"box box1"></div><div class"box box2&quo…

js实现鼠标移动

要求&#xff1a; 鼠标移入美女图片&#xff0c;出现半透明正方块鼠标移出美女图片&#xff0c;隐藏半透明正方块鼠标在美女图片区域移动&#xff0c;半透明正方块随着移动半透明正方块移动到美女图片四边界时&#xff0c;停止移动点击下面小图切换大图 html结构部分 <!D…

js实现图片移动

图片在指定范围内移动 图片在指定范围内移动&#xff0c;配上合适和图片和背景&#xff0c;就可以完成好看的动态页面。 其实就是一张猫行走的动图&#xff0c;再配上黄色的背景色。 <body style"background-color:rgba(255,216,0,1.00)"> //背景颜色<im…

JavaScript移动显示

JavaScript移动显示 1.首先创建好 html 的格式&#xff0c;然后&#xff01;Tab&#xff1b;我们要实现鼠标在div标签中移动时&#xff0c;下面的p标签实时显示鼠标在div的位置&#xff0c;首先要在body里创建div标签和p标签&#xff0c;分别给它们设置id名&#xff0c;如下图&…

使用JavaScript 实现简单的移动和缓动的动画效果

目录 一、H5的简单布局 二、css的布局 三、获取元素 四、使用js来实现‘盒子’移动 效果展示 五、使用js来实现缓动效果 效果展示 六、完整代码评论区自取 一、H5的简单布局 <div class"box box1"></div><div class"box box2">&…

一文教你如何用JS代码来操作元素拖拽移动的效果

目录 一、先看要执行后的效果二、看完效果后&#xff0c;来捋一下我们要执行效果都有哪些&#xff1f;1. 要获取元素节点的信息2. 需要对该元素进行鼠标按下事件3. 还需要鼠标移入事件与在该元素的按下事件配合实现拖拽效果4. 最后在鼠标在该元素内抬起的同时对鼠标移入事件进行…

JS移动DOM节点,将某节点下所有子节点移动(剪切)到另一个节点下。新手很容易踩的坑!

JS移动DOM节点&#xff0c;将某节点下所有子节点移动&#xff08;剪切&#xff09;到另一个节点下。新手很容易踩的坑&#xff01; 题目(新手练习题)BUG第一种错误第二种错误 解决方案第一种解决方案&#xff08;无循环&#xff09;第二种解决方案第三种解决方案&#xff08;推…

解决最新的Chrome 7 不再支持CRX手动安装方法

从2018年6月13日起,谷歌最新的Chrome 7 不再支持CRX手动安装方法.这样导至国内用户无法顺利安装Chrome扩展&#xff0c;又无法访问Chrome应用商店.这里提供了源码安装方式&#xff1a; 1.把下载的插件包尾缀为 .crx 更改为 .zip 用解压工具解压 2.打开你的Chrome浏览器的 更…

google chrome

麦殼兒 让互联网回归初心 734590632qq.com邀你一起畅享麦殼兒极速体验 注册时输入如下邀请码&#xff0c;即可升格为VIP会员&#xff1a; WsyOuk-6BARChoy0 安装, 使用说明 点击这里下载插件(此链接仅在不能登录Google Chrome Store时使用) 第一步: 下载插件 详细图文说明 第二…

Chrome 设置黑色模式

通过 Chrome 设置更新黑色模式 版本&#xff1a;Google Chrome7 更新 Chrome 浏览器到 78 以上版本在网址栏输入 Chrome 黑色模式指令&#xff1a; chrome://flags/#enable-force-dark&#xff0c; 点击 Enter 键后就进入 黑色模式配置页&#xff1a; 将 Force Dark Mode for…

软件-浏览器-GoogleChrome:Google Chrome

ylbtech-软件-浏览器-GoogleChrome&#xff1a;Google Chrome Google Chrome 是一款由Google公司开发的网页浏览器&#xff0c;该浏览器基于其他 开源软件撰写&#xff0c;包括 WebKit&#xff0c;目标是 提升稳定性、速度和安全性&#xff0c; 并创造出简单且有效率的使用者界…

CentOS 7下安装Google Chrome浏览器

在 Linux 下安装Google Chrome浏览器是标配之一&#xff0c;CentOS 7 系统自带是 Firefox 浏览器&#xff0c;虽然也很优秀&#xff0c;但是平时 Chrome 用习惯了&#xff0c;而且还有很多标签&#xff0c;我希望同步回来&#xff0c;所以安装一个 Google Chrome 浏览器是必须的…

chromium 16 chromium 登陆 google 账号

01 自己编译的 chromium 登陆google账号问题 自己编译的chromium&#xff0c;如果编译的时候&#xff0c;没有提供google key&#xff0c;也没有需改账号体系内容相关代码时&#xff0c;登陆google账号会失败。提示[抱歉&#xff0c;出了点问题。请重试]。如下图: 02 申请 g…

html5设置谷歌浏览器兼容性,google浏览器

google浏览器作为现阶段最实用的搜索工具之一&#xff0c;其中就包括拥有众多功能的存在&#xff0c;例如兼容模式&#xff0c;而兼容模式用的是ie的Trident内核&#xff0c;对此许多用户可能还不是很明白兼容模式的设置&#xff0c;那么 chrome浏览器64位本下载v80.0.3987.122…

谷歌chromeos_谷歌浏览器 79.0.3945.79 正式版

Chrome浏览器追求的是全方位的快速体验&#xff0c;它不仅能飞快地从桌面上启动&#xff0c;而且能瞬间完成网页加载&#xff0c;还能以闪电般的速度运行网络应用。Chrome浏览器整洁且直观&#xff0c;您可在同一位置进行搜索和导航&#xff0c;可随意排列标签页&#xff0c;既…

Chrome version must be 70 and 73

说两个问题 1、 selenium.common.exceptions.WebDriverException: Message: chromedriver executable needs to be in PAT 原因没有找到webdriver运行程序,路径不对或者根本就没有下载 下载地址:https://sites.google.com/a/chromium.org/chromedriver/downloads 2、Chro…

谷歌浏览器 Google Chrome v74.0.3729.131 正式版

Chrome 浏览器追求的是全方位的快速体验&#xff0c;它不仅能飞快地从桌面上启动&#xff0c;而且能瞬间完成网页加载&#xff0c;还能以闪电般的速度运行网络应用。Chrome 浏览器整洁且直观&#xff0c;您可在同一位置进行搜索和导航&#xff0c;可随意排列标签页&#xff0c;…

chrome浏览器

http://blog.csdn.net/pipisorry/article/details/37728839 谷歌浏览器相关设置 谷歌浏览器双击标签关闭 1. 安装拓展程序Chrome Toolbox(chrome已不支持) 2. 鼠标中键单击标签 谷歌浏览器点击书签在新标签页打开 1. 安装拓展程序&#xff1a; chrookmarks \ Bookmarks l…

CentOS7 安装Chrome

目录 1、权限 2、下载 3、安装依赖包 4、安装Chrome 5、打开Chrome 1、权限 若不是root权限&#xff0c;需要在root下执行为用户授权命令&#xff0c;我直接使用root登录 [rootlocalhost src]# usermod -g root login_name 注&#xff1a;login_name替换成自己的登录名 …