用js/javascript 封装标签多属性运动函数 带有回调函数 实现方法更加灵活

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

    <style>

        /* 给各个标签一个简单样式 */

        div{

            width: 100px;

            height: 100px;

            background: pink;

            position: fixed;

            top: 50px;

            left: calc(50% - 50px);

        }

        h1{

            width: 100px;

            height: 100px;

            background: orange;

            position: fixed;

            top: 300px;

            left: calc(50% - 50px);

        }

        p{

            width: 100px;

            height: 100px;

            background: green;

            position: fixed;

            top: 580px;

            left: calc(50% - 50px);

        }

    </style>

</head>

<body>

    <button>div的按钮</button>

    <button>h1的按钮</button>

    <button>P的按钮</button>

    <div></div>

    <h1></h1>

    <p></p>

    <script>

        // 获取各个标签

        let oBtn = document.querySelectorAll('button');

        let oDiv = document.querySelector('div');

        let oH1 = document.querySelector('h1');

        let oP = document.querySelector('p');


 

        // 多属性运动函数封装完毕后  对button绑定 click 事件

        // 并调用封装好的多属性运动函数

        // 根据个人需求写入具体的参数值

        oBtn[0].addEventListener('click',function(){

            move(oDiv,{width:500, height:200,left:60},function(){oDiv.style.background = 'red'})

        })

        oBtn[1].addEventListener('click',function(){

            move(oH1,{height:300,width:400,top:50},function(){oH1.style.background = 'black'})

        })

        oBtn[2].addEventListener('click',function(){

            move(oP,{height:200,width:500,right:80},function(){oP.style.background = 'blue'})

        })





 

        // move 多属性运动函数

        // @param 参数1 element  要运动的标签对象

        // @param 参数2 typeObj  要运动的属性  和最终属性值

        // @param 参数3 comeBack 运动执行的回调函数  默认返回值为空函数

        function move(element , typeObj, comeBack = function(){}){

            // 定义变量num  方便用于记录定时器目前存在的个数

            var num = 0;

            // 对typeObj执行遍历操作

            // 获取每一个属性type

            for(let type in typeObj){

                // 获取初始值   如果初始属性为 opacity  则需要做兼容出理

                let startNum = type === 'opacity' ? window.getComputedStyle(element)[type]*100 : parseInt(window.getComputedStyle(element)[type]);

                

                // 获取最终值  同样需要对 opacity 情况做兼容处理

                let endNum = type === 'opacity' ? typeObj[type]*100 : typeObj[type];

                // 给 num++ 记录产生定时器的个数

                num ++ ;

                // 设定计时器  表变量time 记录定时器的序号  时间间隔为30毫秒

             let time = setInterval(function(){

                // 计算步长  每一次步长即为 对应标签属性值的增减  也即是标签对象每次运动的距离

                let step = (endNum - startNum)/20;

                // 因为步长的产生   并不一定就是整数值 其可能为小数参与运算的值

                // 小数参与运算 会产生精度丢失的问题  导致最终函数的执行也会产生问题

                // 故需要做步长的向上或向下取整的操作    向上取整为正数运算   向下取整为负数时操作 

                // 从而避免精度丢失的问题 为函数造成的一些列问题

                step = step > 0 ? Math.ceil(step) : Math.floor(step);

                startNum += step ; 

                // 将程序算得的最终运动值 符值给要运动标签的属性的值

                element.style[type] = type === 'opacity' ? startNum/100 : startNum + 'px';

                // 进行条件判断  条件满足  即为移动到最终位置  则需要清楚计时器

                if(startNum === endNum){

                    clearInterval(time);

                    // 计时器被清楚  也意味着计时器个数减少  故需要num--

                    num--;

                // 进行条件判断 条件满足 即为所有计时器被器出完毕  

                // 也即是所有属性运动完毕 则回调函数

                    if(num === 0){

                        comeBack();

                    }

                }

             },30)

            }

        }

        // @码上成功~

    </script>

</body>

</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: XMLHttpRequest可以用来封装一个http请求函数,可以通过XMLHttpRequest.send()方法来发送请求,XMLHttpRequest.onreadystatechange()方法可以获取调用结果。 ### 回答2: XMLHttpRequest是一种浏览器内置的JavaScript对象,用于发起HTTP请求并处理响应。可以使用XMLHttpRequest来封装一个http请求函数,并返回调用结果。 首先,创建一个XMLHttpRequest对象: ```javascript var xhr = new XMLHttpRequest(); ``` 然后,定义一个回调函数来处理响应: ```javascript xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { var response = xhr.responseText; // 处理响应 console.log(response); } }; ``` 接下来,使用open方法设置请求方法和URL,并发送请求: ```javascript xhr.open("GET", "http://example.com/api", true); xhr.send(); ``` 在回调函数中,可以对响应进行进一步的处理。如果需要发送带有数据的POST请求,可以在send方法中传递参数: ```javascript xhr.open("POST", "http://example.com/api", true); xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(JSON.stringify(data)); ``` 最后,可以通过将这个封装好的http请求函数进行封装,来用于不同的http请求调用。例如: ```javascript function httpRequest(method, url, data, callback) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { var response = xhr.responseText; callback(response); } }; xhr.open(method, url, true); xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(JSON.stringify(data)); } httpRequest("POST", "http://example.com/api", data, function(response) { // 处理响应 console.log(response); }); ``` 这样就可以封装一个http请求函数,并返回调用结果。 ### 回答3: 使用XMLHttpRequest封装一个HTTP请求函数,并返回调用结果的代码如下: ```javascript function httpRequest(url, method, data) { return new Promise(function(resolve, reject) { var xhr = new XMLHttpRequest(); xhr.open(method, url, true); xhr.onload = function() { if (xhr.status >= 200 && xhr.status < 300) { resolve(xhr.response); } else { reject({ status: xhr.status, statusText: xhr.statusText }); } }; xhr.onerror = function() { reject({ status: xhr.status, statusText: xhr.statusText }); }; if (method === 'POST') { xhr.setRequestHeader('Content-Type', 'application/json'); } xhr.send(JSON.stringify(data)); }); } // 调用示例 var apiUrl = 'https://api.example.com/data'; var requestData = { name: 'John Doe', age: 25 }; httpRequest(apiUrl, 'POST', requestData) .then(function(response) { console.log('调用成功', response); }) .catch(function(error) { console.error('调用失败', error); }); ``` 这段代码定义了一个`httpRequest`函数,接受三个参数:`url`表示要发送请求的URL地址,`method`表示请求的方法(如GET或POST),`data`表示请求的数据。函数通过创建一个新的`XMLHttpRequest`对象,设置请求的URL和方法,然后发送请求。当请求成功返回时,通过`resolve`回调函数返回请求结果;当请求失败时,通过`reject`回调函数返回错误信息。在调用时可以使用`then`方法处理请求成功的结果,使用`catch`方法处理请求失败的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值