在vue中用原生js写展示框宽度变化的动画

vue 之动态计算ul宽度,根据li个数动态获取 ul 宽度 1、html <ul ref="ul"> <li ref="ulli"></li> </ul> 2、JavaScript // 获取高度值 (内容高+padding+边框) let height= this.$refs.ulli.offsetHeight; // 获取元素样式值 (存在单位) let height = window.getC... 阅读详情

  之前是用jquery的animate写动画,动画也比较好用,但是在涉及到动画完成之后的数据显示和变化(回调操作)时,效果就有点影响了。

$(".center-modal").animate({ width: "41.5rem" }, 500, "linear", ()=> {
    // 执行传入的回调,做一些数据修改
    callback();
    console.log('测试文本')
})

  原本是上面那样写,在我的电脑也没有问题,但是在其他好几位同事的电脑上,发现这个animate动画的回调执行了3次(打印了3次,debugger也确实卡了3次;但是在我电脑上就执行1次)验证了和浏览器无关,同样的浏览器,我和同事们的该动画回调执行次数不一样,无奈之下我只能寻找其他的写法来写动画。

  最后参考了w3school的内容,具体链接:
  https://www.w3school.com.cn/js/js_htmldom_animate.asp

在这里插入图片描述

  最后上一下我改的代码,widthAdd 和 widthMinus 对应的就是 myMove函数

// 宽度变大的动画
widthAdd(targetWidth, callback = () => {}) {
      let modal = this.$refs.centerModal;
      //   var elem = document.getElementById("animate");
      let pos = 0;
      let id = setInterval(frame, 5);
      function frame() {
        if (pos >= targetWidth) {
          clearInterval(id);
          // 这里可以在动画执行完毕之后进行一些回调操作
          callback();
        } else {
          pos = pos + 0.5;
          modal.style.width = pos + "rem";
        }
      }
    },
// 宽度变小的动画
widthMinus(initWidth, callback = () => {}) {
      let modal = this.$refs.centerModal;
       //   var elem = document.getElementById("animate");
      let pos = initWidth;
      let id = setInterval(frame, 5);
      function frame() {
        if (pos <= 0) {
          clearInterval(id);
          // 这里可以在动画执行完毕之后进行一些回调操作
          callback();
        } else {
          pos = pos - 0.5;
          modal.style.width = pos + "rem";
        }
      }
    },
// 展示框关闭函数
closeModal() {
      this.widthMinus(() => {
        // 关闭之后重置一些数据
        this.modalList = [];
        this.btxxDetailsList = [];
        this.modalListcon = false;
        this.modalTitle = "详情信息";
        this.firstOpen = true;
      });
    },
// 展示框打开函数, 入参的callback是为了更好的在openModal外部定义想要的回调操作
openModal(callback = () => {}) {
      if (this.firstOpen) {
        callback();
        this.widthAdd();
        this.firstOpen = false;
        // $(".center-modal")
        //   .animate({ width: "41.5rem" }, 500)
        //   .promise()
        //   .done(() => {
        //     this.firstOpen = false;
        //   });
      } else {
        // 否则先关闭再打开
        this.widthMinus(() => {
          this.modalList = [];
          this.btxxDetailsList = [];
          this.modalListcon = false;
          callback();
          this.widthAdd();
          this.firstOpen = false;
        });
      }
    },
【收藏向】模拟电子技术超强知识点总结 20小时不挂科 模电真的有难度的一门课,一定要好好学… 用的教材是华科康华光版,其他版本教材也可参考,内容是差不多的。 话不多说直接上思维导图干货(后有思维导图高清原图链接) 1 绪论 2 运算放大器 3 二极管及其基本电路 4 场效应管及其放大电路 5 双极结型三极管及其放大电路 三种组态总结看不清,给个特写 发现虽然csdn上传的是原图,但是显示的图片不是特别清晰,在此贴出B站知乎地址,第五章之后的内容都在上面,还可以查看原图 ———————————————————— B站专栏地址(可以点击查看原图) htt 阅读详情

相关推荐

深入解析EXI协议在ISO15118-2命令测试中的编解码实践

本文深入探讨了EXI协议在ISO15118-2车桩通信标准中的关键作用与实践方法。EXI编解码测试是确保通信准确性与效率的核心环节,文章详细介绍了从搭建测试环境、选择工具库到编写完整测试代码的全过程,并分析了结果差异的常见原因与调试技巧,为电动汽车充电系统的开发者提供了实用的技术指南。

potato的博客 1048

vue实现一个鼠标放在左边栏实现一个宽度变宽的一个动画效果

鼠标放在左边栏实现一个宽度变宽的一个动画效果,以及走马灯,进度条,tab表格的实现

qq_66180056的博客 1298

得利捷datalogic扫码枪调试说明

针对得利捷datalogic扫码枪快速调试并,可以根据详细步骤设置扫码枪,并配有tcp调试助手辅以验证,以达到快速调试完成扫码枪的工作。

Conway510的博客 1万+

使用vue3写一个自动获取宽度高度变化的过渡动画

<p>首先,在 vue3 中使用过渡动画需要在组件中使用 <code>&lt;transition&gt;</code> 标签包裹住你想要添加过渡动画的元素。然后可以在 <code>&lt;transition&gt;</code> 标签上添加 <code>name</code> 属...

weixin_35748962的博客 943

STM32 WinUSB免驱实现:从DFU模式到高速通信的实战指南

本文详细介绍了STM32 WinUSB免驱实现方案,从DFU模式到高速通信的完整实战指南。通过修改设备描述符、添加BOS描述符和实现WCID描述符集,开发者可以轻松实现即插即用的USB设备,无需额外安装驱动。文章还提供了性能优化技巧和实际应用案例,帮助开发者快速部署高效稳定的USB通信方案。

weixin_29171087的博客 422

XC95144XL-10TQG144I Xilinx XC9500XL 高性能 CPLD

XC95144XL-10TQG144I 属于 Xilinx 的 XC9500XL 高性能 CPLD 家族,是一颗面向 3.3V 低电压系统的可编程逻辑器件。该器件以小封装、高速响应和良好的系统兼容性为设计目标,常用作系统控制/ glue-logic、I/O 缓冲、状态机、总线桥接与接口协议前端等场景中的可重编程逻辑单元。产品支持现场(in-system)编程与 IEEE-1149.1 JTAG 边界扫描,能在系统板上直接更新逻辑。

2403_90082736的博客 1060

css动画渐变及动态宽度设置-vue demo制作

css动画渐变及动态宽度设置-vue demo制作

偏执的小男孩儿 1252

Oracle 常用语法汇总

CREATE TABLE 表名(COMMENT ON COLUMN 注释;-- 创建一个学生表STUDENT_ID NUMBER(10) PRIMARY KEY, -- 学生ID,主键FIRST_NAME VARCHAR2(50) NOT NULL, -- 学生名字,不允许为空LAST_NAME VARCHAR2(50) NOT NULL, -- 学生姓氏,不允许为空EMAIL VARCHAR2(100) UNIQUE, -- 学生电子邮箱,唯一。

拽着尾巴的鱼儿的博客 2157

vue3,自定义TransitionView,自动获取宽高设置过渡动画

vue3自动获取宽高设置过渡动画

weixin_48819809的博客 1634

ESP32设备驱动-MLX90393磁场传感器驱动

MLX90393 磁场传感器可以在运行时重新编程为不同的模式和不同的设置。 该传感器使用 Melexis 专有的 Triaxis® 技术提供与沿 XYZ 轴感应的磁通密度成比例的 16 位输出,还提供温度输出信号。 这些数字值可通过 I2C 和 SPI 获得,其中 MLX90393 是总线上的从设备。

视觉与物联智能 2351

从养殖场到科技前沿:YOLOv11+OpenCV精准计数鸡蛋与鸡

YOLOv11结合OpenCV技术,精准识别和计数鸡蛋与鸡,广泛应用于养殖场、市场监控和自动化包装。通过深度学习与计算机视觉,提升农业生产效率,让智能化管理更简单高效。

专注于深入研究多种编程语言,以实战为导向,逐步拓展开发技能,提升工程化编码和思维能力,展现无敌技术实力。 1206

vue+element项目里实时监听某个div宽度的变化,然后执行相应的事件

背景:vue项目中用到echarts图表,页面上有侧边栏,侧边栏收缩图表不能自适应,想通过监听内容部分的宽度让图表resize,试过window带的resize,只能监听浏览器窗口大小变化,为了监听某元素区域的变化而使echarts的尺寸重置。 本次解决采用element-resize-detector可以完美的解决 思路:因为收缩侧边栏的时候右侧的区域会自动适应,但是echarts不...

csl125的博客 3万+

FPGA实现CAN接口(SJA1000)

学无止境,善于积累,每天积累一点点,成功就在眼前,加油! 1 CAN总线简介 CAN(Controller Area Network,控制器局域网 )总线是一个多主机异步串行总线,也是国际上应用最广泛的现场总线之一。在现场总线中,它是惟一被ISO国际标准化组织批准的现场总线。由于其成本低、容错能力强、支持分布式控制、通信速率高等优点在汽车、工业控制、航天等领域得到广泛应用。特别是由于CAN总线具有...

m0_46498597的博客 1万+

Vue实现监听dom节点宽高变化

在Vue中实现监听dom节点宽高变化 原生js方法 该方法适用所有vue项目,原生js开发的思维 <div ref="datas"> <div class="scroll_box" ref="scroll" style="width:20%;height: 20%;overflow:scroll;position: absolute;left: 0;top: 0;back...

qq_41114603的博客 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【愚公系列】《循序渐进Vue.js 3.x前端开发实践》039-使用JavaScript的方式实现动画效果

在现代网页开发中,动画效果不仅能够提升用户体验,还能够为网站增添活力和趣味。虽然 CSS 动画因其简单易用而被广泛应用,但有时我们需要更复杂的动画效果,这时 JavaScript 就成为了不可或缺的工具。通过 JavaScript,我们可以实现更为灵活和自定义的动画效果,控制动画的每一个细节。本篇文章将深入探讨如何使用 JavaScript 创建动画效果。我们将介绍基础的 DOM 操作,结合 requestAnimationFrame 方法来实现平滑的动画过渡。

愚公智库 12万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

vue3+elementPlus+原生js:根据浏览器宽度的element进度条跟着缩放

项目背景:浏览器缩放时,el进度条还是固定的宽度无法达到自适应状态,所以要使用原生js获取dom来进行判断即可。js层,直接编写响应函数,先用querySelectorAll获取所有进度条的dom之后,在进行循环遍历在for循环里进行样式的改写.这里是浏览器的宽度,用来判断进度条的大小样式。获取所有进度条的dom,进度条的响应样式,最后在vue视图挂载,window.onresize指的是实时监听变化

意初的博客 1527

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

实现ElementUI Dialog宽度响应式变化

  在ElementUI的Dialog中,需要实现其宽度随浏览器宽度变化而变化,并设定默认值,当浏览器宽度大于该值时,Dialog保持该宽度,小于该值时,使用100%宽度。 代码使用window.onresize 事件触发变化,具体Demo代码如下 <template> <div class="app-container"> <div cla...

weixin_30470643的博客 3254

vue2 :js动画库

它是一个非常简单和小型的 Vue.js 组件,用于 Vue.js 应用程序的动画输入,它还用于约 400 字节的 JavaScript动画输入。由于这个库是相当新的,而且每个月都会发布更新的版本,因此建议仅使用这个库来为你的个人项目尝试一些新的东西。是 Vue.js 一个组件,用于应用平滑的垂直数字过渡效果,一个非常平滑和轻量级的库,可用于快速构建的个人前端项目。是Vue.js一个视差指令,它对应用程序中的图像应用可定制的视差滚动效果,它可以为平移和背景位置设置动画。

weixin_1095的博客 1395

vue实时监听窗口宽度变化

上面的方案每隔0.4秒会获取一次屏幕的宽度,并将宽度值赋值给data中的screenWide,就可以直接通过this.screenWide获取了。既然可以监听到窗口screenWidth值的变化,就可以根据这个值设定不同的自适应方案了!

xiaoqin5的博客 3084

VUE监听(动态/实时)获取元素的宽度变化

1920*1080的云图效果能自适应显示,所以得实时获取屏幕的宽度,然后用屏幕的宽度和1920的宽度进行对比,计算出占比,然后用CSS3的transform scale来实现自适应。在utils文件下创建directive,然后directive文件夹下创建一个resizeObserver.js文件。是可以监听到DOM元素,宽高的变化,需要注意的一点就是监听出变化结果是contentBox的宽度和高度。第二步:在directive文件夹再创建一个index.js文件,目的是为了集中注册自定义指令。

陈大文的博客 3460

javascript原生360 开机小动画

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> .box{ width: 322px; ...

dcw43465的博客 480

Javascript——三大系列及js动画

1、返回自身实际的宽度(实际内容的宽度),不含边框,返回数值不带单位。2、返回自身实际的高度(实际内容的宽度),不含边框,返回数值不带单位。1、获取该元素带有定位的父级元素,如果父级没有定位,则返回body。3、返回自身的宽度,包括padding,内容区,不含边框。4、返回自身的高度,包括padding,内容区,不含边框。4、返回自身的宽度(包括内容区,边框,padding)5、返回自身的高度(包括内容区,边框,padding)3、返回被卷去的上侧距离,返回数值不带单位。滚动事件触发时,打印被卷去的距离。

2401_86219459的博客 1734

关于VUE监听窗口变化事件问题

Vuejs 本身就是一个 MVVM 的框架。但是在监听 window 上的 事件 时,往往会显得 力不从心。 比如 这次是 window.resize恩,我做之前也是百度了一下。看到大家伙都为这个问题而发愁。 问题: 今天我也 遇到了这样一个问题, 是关于canvas 自适应。 根据窗口的变化去变化 canvas 的宽度备注: 重要的问题说三遍 解决 框架内的bug 先说 框架 版本 版本 版

世界这么大我很想去躺会儿 1万+

js监听某个element元素的宽度变化

然后,创建一个 ResizeObserver 对象,并传入一个回调函数。在回调函数中,我们可以通过 entry.contentRect.width 获取到元素宽度,并将其赋值给变量 b。请注意,ResizeObserver 目前需要在大多数现代浏览器中使用,并且对于相对复杂的布局改变可能会有性能影响。如果只需要获取宽度一次,或者仅当特定的事件(例如窗口调整大小)发生时才需要获取宽度,您也可以考虑使用其他适当的事件监听机制。的宽度变化,并将宽度值复制给变量 b,可以使用 ResizeObserver 对象。

weixin_52443895的博客 2822
上一篇: 11位手机号后4位隐藏处理
下一篇: js 将px或者rem宽度转换为数字的方法
喝杯卡布奇洛上路吧
博客等级 码龄6年 1粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值