首页 > 编程语言 >JavaScript 之 DOM 操作(二)

JavaScript 之 DOM 操作(二)

时间:2024-08-11 14:24:28浏览次数:8  
标签:function 函数 DOM JavaScript element var 操作 property Math

八 、动画操作

(一)动画原理

目标位置 = 当前位置 + 步长

(二)动画函数封装

        // 定义函数,传参,element 表示dom对象,option 表示对象,foo 表示函数
        function animate(element, option, foo) {
            // 使用前清除定时器
            element.time && clearInterval(element.time)
            // 执行定时器函数
            element.time = setInterval(function () {
                // 定义开关
                var isStop = true;
                // 循环 option 对象
                for (var property in option) {
                    var value = option[property]
                    // 判断是否为透明度属性,是乘以100
                    value = property === 'opacity' ? (option[property] * 100) : parseFloat(value)
                    // 获取当前位置
                    var cssObj = getComputedStyle(element)
                    var current = cssObj[property]
                    current = property == 'opacity' ? (cssObj[property] * 100) : parseFloat(current)
                    // 步长 = (目标位置 - 当前位置) / 数字
                    var speed = (value - current) / 10
                    // 判断步长正负,目的为了使元素向两个方向移动
                    speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed)
                    // 判断所有属性是否运动到目标值
                    if (current != value) {
                        // 如果存在一个属性没有达到目标位置 那就不让停止定时器
                        isStop = false
                    }
                    // 判断是否为透明度,是除以100,否则将当前位置加步长
                    var propValue = property === 'opacity' ? (current + speed) / 100 : current + speed + 'px'
                    element.style[property] = propValue;
                }
                if (isStop) {
                    // 到达位置,停止定时器
                    clearInterval(element.time)
                    // 检测是否是函数,是就执行
                    if (foo && typeof foo == 'function') {
                        foo()
                    }
                }
            }, 10)
        }

(三)防抖和节流

1. 防抖和节流思想

1.1 防抖

防抖是指相隔的时间内,如果事件再次或多次触发,会因为延迟函数被清除,从而不会执行,目的防止事件触发,导致函数被频繁执行。

1.2 节流 

节流是指间隔的时间内,事件再次或者多次触发,不会重新计算这个间隔的时间,只要时间符合条件。

2. 函数封装

2.1 防抖函数
        // callback: 回调函数
        // times: 间隔的时间
        function debounce(callback, time = 300) {
            // 定义延迟函数变量
            var delay = null;
            // 返回一个函数,这里使用了闭包
            return function () {
                // 判断延迟函数是否正在执行,执行则清除函数
                if (delay != null) clearTimeout(delay)
                // event对象    
                // arguments对象可以获取事件对象
                var _event = arguments[0]
                // 记录this指向
                var _this = this
                // 定义延迟函数
                delay = setTimeout(function(){
                    // 调用函数
                    if(callback){
                        // 使用apply改变this指向,还可以使用 call 和 bind 改变
                        callback.apply(_this,_event)
                    }
                },time)
            }
        }
2.2 节流函数
        //封装节流函数
        function throttle(callback, time = 300) {
            // 定义开始时间戳
            var nowTime = new Date().getTime()
            return function () {
                // 结束时间戳
                var endTime = new Date().getTime()
                // 时间间隔
                times = endTime - nowTime
                // 判断是否大于等于间隔的时间
                if (times >= time) {
                    var _event = arguments[0]
                    var _this = this
                    if (callback) {
                        callback.apply(_this, _event)
                    }
                    nowTime = endTime
                }

            }
        }

九、随机元素函数封装

随机元素包括随机颜色、随机尺寸、随机坐标。

// 随机颜色
function getRandomColor() {
    // 声明变量
    var red = Math.floor(Math.random() * 256);
    var green = Math.floor(Math.random() * 256);
    var blue = Math.floor(Math.random() * 256);
    // 返回字符串
    return `rgba(` + red + `,${green},${blue}, .5)`;
}
// 随机尺寸
function getRandomSize() {
    // 控制在50~200之间(包含200)
    return Math.floor(Math.random() * 201);
}
// 随机坐标
function getRandomPos() {
    // 水平坐标取值范围  100 ~ 1600
    // 垂直坐标取值范围  50 ~ 600
    return {
        // 获取指定范围的随机数
        x: Math.floor(Math.random() * (1600 - 100) + 100),
        y: Math.floor(Math.random() * (600 - 50) + 50)
    }
}

标签:function,函数,DOM,JavaScript,element,var,操作,property,Math
From: https://blog.csdn.net/m0_73759720/article/details/141098951

相关文章

  • JAVA中的Random类
    在Java中,`java.util.Random`类是一个用于生成伪随机数的类。它提供了多种方法来生成不同类型的随机数。下面是使用`Random`类的示例代码,包括注释:importjava.util.Random;publicclassRandomExample{  publicstaticvoidmain(String[]args){    /......
  • springboot打包程序操作
    打包作用:我们打包的主要目的就是为了不使用idea也能够运行程序,能够把这个程序给放到服务器上去运行。第一部分:打包程序(1)首先把所有的页面都关掉,确保有一个干净的页面:(2)然后在右侧的maven部分点击package操作,并等待执行一段时间:(3)打包成功的结果第二部分:找到打包程序(1)在......
  • OpenCV 开闭操作
    目录一:开操作(先腐蚀后膨胀)  特点:消除噪点,去除小的干扰块,而不影响原来的图像二:闭操作(先膨胀后腐蚀)  特点:可以填充闭合区域三:利用开操作完成的任务  (一)提取水平垂直线  原理:  (二)消除干扰线  (三)提取满足要求的形状一:开操作(先腐蚀后膨胀)特点:消除噪......
  • 利用OpenCvSharp进行图像相关操作
    前言程序设计过程,有时也需要对图像进行一些简单操作,C#没有现成的图像处理库,但有人对OpenCV进行了包装,我们可以很方便的使用OpenCvSharp对图像进行操作。当然了,这也需要使用的人员进行一些研究,但相对于C++版本,它已经非常友好了。1、显示图像代码:privatevoidbutton1_Click(......
  • [图文直播]Windows操作系统部署Jenkins
    前言首先说明一下我为什么选择在Windows操作系统上部署Jenkins是吧,主要基于虽然从长远上看,我是有进行跨平台开发的需求,但至少在可预见的三到五年时间内,我的潜在客户也都是在windows操作系统上。至于跨平台,规划上要有,但正如天龙八部里天龙寺内面对鸠摩智打算拿拈花指、无相劫指......
  • Javascript常见算法(二)
    合并K个排序链表详解 在JavaScript中合并K个已排序的链表是一个常见的算法问题,它可以通过多种方法解决,包括使用优先队列(通常通过最小堆实现)或直接两两合并。这里,我将详细解释这两种方法,并给出示例代码。方法一:使用优先队列(最小堆)这种方法的核心思想是利用一个最小堆来持续......
  • CUDA--内存访问越界或无效的索引操作解决办法
    报错信息File"D:\anaconda3\envs\HCAVE2\lib\site-packages\torch\nn\utils\rnn.py",line258,inpack_padded_sequencesorted_indices=sorted_indices.to(input.device)RuntimeError:CUDAerror:device-sideasserttriggeredCUDAkernelerrorsm......
  • CUDA--内存访问越界或无效的索引操作解决办法--总结
    设备端的断言错误(device-sideasserttriggered)通常发生在CUDA代码中访问无效的内存地址或执行了无效的操作。解决这种错误需要系统地排查代码中的潜在问题。以下是详细的解决方案:1.检查数组边界确保所有访问数组或指针的操作都在有效范围内。检查线程索引和块索引的计算,确......
  • 【时时三省】(C语言基础)操作符3
    山不在高,有仙则名。水不在深,有龙则灵。             ----CSDN时时三省&取地址操作符示例: 每个内存单元都有自己的编号编号就成为内存单元的地址&a就是找出a的地址后面可以加一个int*pa=&a是可以用来存放地址pa是用来存放地址的-pa就是一......
  • 虚拟DOM如何被渲染产生的?(虚拟DOM和diff算法(上))
    虚拟DOM如何被渲染产生的?答:h函数h函数的使用:1.产生虚拟节点(vnode)2.h函数可以嵌套,从而得到虚拟DOM树1.产生虚拟节点import{init,classModule,propsModule,styleModule,eventListenersModule,h}from"snabbdom";//创建出patch......