zoukankan      html  css  js  c++  java
  • js知识总结

    1.获取屏幕可视的大小:
    标准浏览器及IE9+ || 低版本浏览器IE8以下 || 低版本混杂模式

    window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight
    jquery : $(window).height()
    

    2.获取滚动条滚动的距离:

    window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
    jquery: $(document).scrollTop()
    

    3.获取元素的尺寸:(左边jquery方法 右边原生方法)

    $(o).width() = 0.style.width;
    $(o).innerwidth() = o.style.width + o.style.padding;
    $(o).outerWidth() = o.style.width + o.style.padding + o.style.border;
    

    4.获取元素的位置:(左边jquery方法 右边原生方法)
    $(o).offset.top = getOffsetTop();

    原生js的实现方法

    var imgs = document.getElementByTagName("img");
    function lazyLoad() {
    	var winHeight = window.innderHeight || document.documentElement.innderHeight || document.body.innderHeight,  //可视窗口的高度
    		scrollTop= window.pageYOffset || document.documentElement.scorllTop || document.body.scrollTop;   //滚动条的位置
    	for(var i=0;i<imgs.length;i++){
    		var x = winHeight + scrollTop - imgs[i].offsetTop;
    		if(x>0) {
    			imgs[i].src = imgs[i].getAttribute("data-url");
    		}
    	}
    }
    setInterval(lazyload,1000);   //设置定时器来检查是否进行滚动,然后处理在可视窗口范围内的图片。
    

    setTimeout & setInterval 的区别

    setTimeout方法是一个定时程序,运用在延迟一段时间,只执行一次
    setInterval方法是表示在一定间隔内重复执行某个操作的程序

    用原生js实现一个图片轮播效果

    核心基本原理:做一个div,宽高固定,设置overflow:hidden,
    在该div里面设置一个ul,每个li里面放着排列的图片,大小就是外层div的宽高
    ul的宽度设置为所有图片大小的总和,这样就不会换行,
    然后,js里面设置一个定时器setInterval,每个几秒不断修改ul的margin-left,大小就是为一张图片的宽度
    效果就是向左滑动了一个图片,每次切换一个图片,就将ul的第一个li copy到ul的最后一位,并删除掉第一个li,这个时候,li已经在可视窗口的外面,用户看不到,然后修改ul的margin-left为零。这样就可以实现无缝首尾切换了

    js代码实现:

    window.onload = function() {
        var speed = 1e3, time = 1e3, it = 0, ul = document.getElementById("items"), list = ul.childNodes, len = list.length, step = 78 / 1e3, tr = null, scroller = function() {
            tr = setInterval(function() {
                var left = 0;
                //动画
                for (var i = 0; i <= time; i++) {
                    setTimeout(function() {
                        ul.style.left = "-" + left + "px";
                        left = left + step;
                    }, i);
                }
                //执行完之后,将第一个li放到最后去
                setTimeout(function() {
                    var l = document.createElement("LI"), i = document.createElement("IMG"), f = ul.getElementsByTagName("LI");
                    i.src = f[0].firstChild.src;
                    l.appendChild(i);
                    ul.removeChild(f[0]);
                    ul.appendChild(l);
                    ul.style.left = "0px";
                }, time);
            }, speed);
        };
        for (var i = 0; i < len; i++) {
            if (list[i].tagName === "LI") {
                it++;
            }
        }
        ul.style.width = it * 78 + "px";
        scroller();
        ul.onmouseover = function() {
            clearInterval(tr);
        };
        ul.onmouseout = function() {
            scroller();
        };
    };
    

    transition & animation 的区别

    1.触发事件不一样,transition需要某个事件触发(点击,鼠标悬停等)。animation不需要事件去触发,文档加载完成之后就可以执行动画。
    2.循环次数。transition只执行一次,而animation循环一次或者多次动画
    3.变化形态。transition是从0-100%一个递进的变化。而animation可以自定义任何一个时间段内的变化状态样式。
    4.结合js。transition可以很好的结合js来实现一个简单的动画。

    结论:1.如果要灵活定制多个帧以及循环,就用animation
    2.如果只是简单的form to效果,就用tranition
    3.如果使用js灵活设定动画属性,用transition

    cookie是网站为了标识用户身份而存储在用户本地终端上的数据(通常已经加密)
    cookie数据始终在同源的http请求中携带(即使不需要),会在服务器与浏览器之间来回传递。
    localstorage 和 sessionStorage不会自动把数据发给服务端,仅在本地存储。

    存储大小:
    cookie的数据大小不能够超过4K,比较小
    localstorage 和 sessionStorage虽然也有存储大小限制,但是比cookie大的多,可以达到5M

    跨域问题

    同源策略:要求域名,协议,端口都要相同
    1.jsonp
    原理:通过动态创建script,通过script标签引入一个js文件,当这个js文件引入成功后就会执行url参数中指定的函数,并且会把我们需要的json数据作为参数传入

    function createJs(sUrl) {
       var oScript = document.createElement("script");
       oScript.type = "text/javascript";
       oScript.src = sUrl;
       document.getElementsByTagName('head')[0].appendChild(oScript);
    }
    createJs('jsonp.js');
    
    // jsonp.js
    box({
       name:"text"
    })
    
    function box(json){
       alert(json.name)
    }
    

    优点:兼容性好,简单易用,支持浏览器和服务器的双向通信,
    缺点:只是支持get请求

    2.CORS(跨源资源共享)

    服务端对于cors的支持,主要是通过设置Access-Control-Allow-Origin

    与原生app(android & iOS)通过js来进行交互

    else if(this.device()=='ios'){
        window.webkit.messageHandlers.wxPay.postMessage(this.paydata);
    }else if(this.device()=='android'){ 
        androidInterface.wxMemberPay(JSON.stringify(this.paydata)); 
    }
    
  • 相关阅读:
    我和LEGO Mindstroms NXT(1)
    [翻译]介绍Xbox LIVE社区游戏
    想做一个显示全国火车运行图的网站(1)想想
    [翻译]CCR and DSS Toolkit 2008 发布了
    我和LEGO Mindstroms NXT(2)
    [翻译]机器人游戏可以下载了!
    vs的form标签引起css走样问题
    做个md5查询站(1)从8年前说开去
    [翻译]Microsoft Robotics Developer Sutdio 2008 7月CTP发布了
    做个md5查询站(3)数据格式
  • 原文地址:https://www.cnblogs.com/Imflyer/p/6559894.html
Copyright © 2011-2022 走看看