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=%E6%A0%A1%E5%9B%AD&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
web前端常用的封装方法的更多相关文章
- WEB前端常用网站收集
		WEB前端常用网站收集整理 w3school.w3schools 前端里.脚本之家.素材家园 17素材.frontopen NEC更好的CSS方案.一些常用的JS实例 Bootstrap 官网 h ... 
- 整理部分JS 控件 WEB前端常用的做成Jsp项目,方便今后直接用
		整理部分JS 控件 WEB前端常用的做成Jsp项目,方便今后直接用 最近又没时间了,等用时间了,再加入更多的, 源码下载: http://download.csdn.net/detail/liang ... 
- WEB前端性能优化常见方法
		1.https://segmentfault.com/a/1190000008829958 (WEB前端性能优化常见方法) 2..https://blog.csdn.net/mahoking/arti ... 
- web 前端常用组件【05】ZTree
		web 项目或多或少都会有涉及到什么人员职称树,菜单树,组织机构树等. 历手三四个项目有大有小,采用的树前端都是 Ztree. 有些优秀的J2EE 框架将这些常用的组件都封装起来,作为模块化的组件提供 ... 
- web 前端常用组件【03】Bootstrap Multiselect
		实际的项目网站中或多或少的或用到多选框,我选用的一款是 Bootstrap Multiselect. 官方文档:http://www.kuitao8.com/demo/20140224/1/boots ... 
- iOS常用的封装方法
		做开发也有一段时间了,看了好多大神的代码,总体感觉他们写的代码简洁,好看,然而在对比下我写的代码,混乱,无序,简直不堪入目啊! 总体来说大神们的代码封装的都比较好,对一个项目要重复用到的代码他们都会封 ... 
- JavaScrpt常用的封装方法
		1.闭包封装.在这个封装方法中,所有的实例成员都共享属性和方法, 使得所有得方法和属性都私有且对象间共享 (function ($) { var Person = function(name) { r ... 
- web前端常用库
		项目中可能用到的web前端库(持续记录): 1.轻量化货币库:https://github.com/openexchangerates/accounting.js ,美元形式.欧元形式等 2.时间 ... 
- web 前端常用组件【06】Upload 控件
		因为有万恶的IE存在,所以当Web项目初始化并进入开发阶段时. 如果是项目经理,需要知道客户将会用什么浏览器来访问系统. 明确知道限定浏览器的情况下,你才能从容的让手下的封装必要的前端组件. 本篇文章 ... 
随机推荐
- iReport - 无法正常启动的解决方法
			问题与分析 最近需要用到iReport报表工具,但是在启动客户端时却发现只出现了启动界面,很快就界面消失没反应了.反复打开了好几次客户端,都无法正常打开.问了下同事,说是因为jdk升级的原因,以前项目 ... 
- SpringBoot | Hibernate @Transient 注解
			在默认情况下,持久化类的所有属性会自动映射到数据表的数据列.如果在实际应用中,不想持久保存某些属性,则可以考虑使用@Transient来修饰它们. 如果一个属性并非数据库表的字段映射,就务必将其标示为 ... 
- 2017"百度之星"程序设计大赛 - 资格赛 度度熊的王国战略
			度度熊的王国战略 度度熊国王率领着喵哈哈族的勇士,准备进攻哗啦啦族. 哗啦啦族是一个强悍的民族,里面有充满智慧的谋士,拥有无穷力量的战士. 所以这一场战争,将会十分艰难. 为了更好的进攻哗啦啦族,度度 ... 
- 洛谷 P4549 【模板】裴蜀定理
			https://www.luogu.org/problemnew/show/P4549 (1)证明方程ax+by=gcd(a,b)(a,b为常数;a>0,b>0;a,b,x,y为整数)有解 ... 
- C#中MessageBox用法大全(附效果图)<转>
			我们在程序中经常会用到MessageBox. MessageBox.Show()共有21中重载方法.现将其常见用法总结如下: 1.MessageBox.Show("Hello~~~~&quo ... 
- 生产环境中mysql+keepalive双主模式,keepalive守护进程实现双主切换提供数据库服务
			mysql+keepalive实现浮动地址自动切换,由于keepalive无自带健康检查功能,所以必须自动编写健康检查守护进程(监控DB1和DB2数据库的监控状态,来保证浮动地址双机自动切换.) 一, ... 
- 开机启动+Linux发送邮件
			需求:检测Linux上Tomcat是否允许,挂了的话给运维发送邮件通知 实现:编写脚本一直检测Tomcat进程是否存活,否则给运维发送邮件,脚本设置开机时自动启动 1.Linux发送邮件 vim /e ... 
- javascript要点(上)
			立即执行函数 即Immediately Invoked Function Expression (IIFE),正如它的名字,就是创建函数的同时立即执行.它没有绑定任何事件,也无需等待任何异步操作: ( ... 
- SourceGrid之Grid绑定数据
			private void BindData() { //为绑定的按钮选线增加单击事件 SourceGrid.Cells.Controllers.CustomEvents clickEvent = ne ... 
- vagrant教程
			http://blog.smdcn.net/article/1308.html http://ninghao.net/blog/1566 如何定制一个自己的 vagrant box: https:// ... 
