web前端常用的封装方法

1、放大镜


        //页面加载完毕后执行
        window.onload = function () {

            var oDemo = document.getElementById('demo');
            var oMark = document.getElementById('mark');
            var FloatBox = document.getElementById('float-box');
            var SmallBox = document.getElementById("small-box");
            var bigBox = document.getElementById('big-box');
            var bigImg = bigBox.getElementsByTagName('img')[0];

            oMark.onmouseover = function (){
                FloatBox.style.display = "block";
                bigBox.style.display = "block";
            }

            oMark.onmouseout = function (){
                FloatBox.style.display = "none";
                bigBox.style.display = "none";
            }

            oMark.onmousemove = function (ev){

                var ev = ev || window.event;
                var left = ev.clientX - oDemo.offsetLeft - SmallBox.offsetLeft - FloatBox.offsetWidth / 2;
                var top = ev.clientY - oDemo.offsetTop - SmallBox.offsetTop - FloatBox.offsetHeight / 2;

                if(left < 10){

                    left = 0;

                }else if(left >= oMark.offsetWidth - FloatBox.offsetWidth - 10){

                    left = oMark.offsetWidth - FloatBox.offsetWidth;

                }

                if(top < 10){

                    top = 0;

                }else if(top >= oMark.offsetHeight - FloatBox.offsetHeight - 10){

                    top = oMark.offsetHeight - FloatBox.offsetHeight;

                }

                FloatBox.style.left = left   "px";
                FloatBox.style.top = top   "px";

                var scaleX = left / (oMark.offsetWidth - FloatBox.offsetWidth);
                var scaleY = top / (oMark.offsetHeight - FloatBox.offsetHeight);

                bigImg.style.left = -scaleX * (bigImg.offsetWidth - bigBox.offsetWidth)   "px";
                bigImg.style.top = -scaleY * (bigImg.offsetHeight - bigBox.offsetHeight)   "px";

            }

        }
        

2、JSONP


        function fn1(data){
            var html = '';
            var oUl = document.getElementsByTagName('ul')[0];

            console.log(data);

            if(data.total != -1){
                for(var i=0; i<data.books.length; i  ){
    
                    html  = '<li><h2>'  data.books[i].title  '</h2> <span>'  data.books[i].author_intro  '</span><img src="'  data.books[i].image  '" /><p>'  data.books[i].summary  '</p> <div><em>'   data.books[i].publisher   '</em></div></li>';
    
                }
    
                oUl.innerHTML = html;
            
            }else{
                document.body.innerHTML ='<h2>亲~~ 没有数据哦~~~</h2>';
            }
            
        }
    
    window.onload = function (){
        
        var oBtn = document.getElementById('btn');
        var iNow = 0;
        oBtn.onclick = function (){
            //动态添加 script 标签   加载URL地址 后传入 callback=fn1 输出一个函数, 在上面则定义好这个函数, 接受一个data 就是资源  json类型,循环输出, 可先console.log(dara) 查看数据
            var oScript = document.createElement('script');
            
            oScript.src="https://api.douban.com/v2/book/search?q=校园&count=10&start="  iNow  "&callback=fn1";
            document.head.appendChild(oScript);
            
            // 点击一次 10,从多少开始获取
            iNow  = 10;
        
        }
            
    }

3、获取指定区间范围随机数,包括lowerValue和upperValue


function randomFrom(lowerValue,upperValue)
{
    return Math.floor(Math.random() * (upperValue - lowerValue   1)   lowerValue);
}
//如获取1-100之间的随机数
console.log(randomFrom(1,100));

4、数组排序



1、快速排序
    
    /** 
     *   得到中间那位那位数,然后循环判断, arr[i] < 中间数 则push leftArr, 否则push rightArr, 最后返回 left数组 '拼接' 中间数   right数组 
     */
    function sort(arr){
    
        if(arr.length <= 1){
            return arr;
        }
    
        var numIndex = Math.floor(arr.length/2);
        var numVal = arr.splice(numIndex,1);
        var leftArr = [];
        var rightArr = [];
    
        for(var i=0; i<arr.length; i  ){
    
            if(arr[i]<numVal){  
                leftArr.push(arr[i]);
            }else{
                rightArr.push(arr[i])
            }
    
        }
    
        return sort(leftArr).concat(numVal,sort(rightArr));

    }

2、sort排序
    var num=[7,45,100,4,2,564];
    num.sort(function (a, b){
        return a - b;
    });
    console.log(num)  //[2, 4, 7, 45, 100, 564]

5、数组去重


1、indexOf 去重

/**
 *   当arr的第一次出现的位置 == i  则是第一次出现就push到tempArr
 */
function unique(arr){

    if (arr.length <= 1){
        return arr;
    }

    var tempArr = [];

    for(var i=0; i<arr.length; i  ){

        if(tempArr.indexOf(parseInt(arr[i])) == -1){        //-1 证明没有出现过

            tempArr.push(arr[i]);

        }

    }

    return tempArr;

}

2、Set去重
function SetUnique(array) {
  return [...new Set(array)];
}
dedupe([1, 1, 2, 3]) // [1, 2, 3]

6、深度拷贝


/** 
 *     深度拷贝
 *     使用for in 在循环赋值,避免对象引用
 */
function copy(obj){

    if(typeof obj != 'object'){
        return obj;
    }

    var newObj = {};

    for(var attr in obj){

        newObj[attr] = copy(obj[attr]);

    }

    return newObj;

}

原文地址:https://segmentfault.com/a/1190000016677097


更多专业前端知识,请上 【猿2048】www.mk2048.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值