精华内容
下载资源
问答
  • 原生图片懒加载

    2020-09-08 22:07:19
    学习目标: 掌握原生图片懒加载 学习内容: 1、 掌握原生图片懒加载 2、 分析js代码 3、 搜索熟悉陌生单词用法 4、 掌握懒加载 ...懒加载一种优化网页性能的一种方式,它极大的提高了用户的体验。举

    学习目标:

    掌握原生图片懒加载

    学习内容:

    1、 掌握原生图片懒加载 2、 分析js代码 3、 搜索熟悉陌生单词用法 4、 掌握懒加载

    概念

    • 什么是懒加载

    懒加载顾名思义突出一个“懒”字,懒字就是拖延的意思,说白就是延迟加载。比如我们进入一个新的页面进行加载的时候,这个页面很长超过了屏幕可视区域的时候,那么懒加载就会优先加载我们可视区域可见的内容,剩余部分是当进入到可视区域之后再进行加载。


    • 为什么要懒加载?

    懒加载是一种优化网页性能的一种方式,它极大的提高了用户的体验。举个栗子:就拿图片来说,一个网站,单个网页的页面上“图片”是构成页面主体的一个极大部分,但是在现在一张图片的大小超过几兆是一件很正常的事,那么就需要注意到一个问题:当用户在访问一个网页的时候就会请求所有图片资源,如果网速不够快的话,那么用户只能够看到一个空白的网页,或者一个不完整的结构布局,当图片加载完成后,估计用户早就走了。
    示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

    HTML部分

    代码如下:

    <!DOCTYPE html>
    <html>
    
    <head>
      <title>Demo-Lazyload</title>
      <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
      <style>
        img {
          height: 500px;
          width: 500px;
          display: block;
          background: url(images/loading.gif) no-repeat center;
          margin: 0 auto
        }
    
        #lazy {
          width: 800px;
          margin: 0 auto
        }
      </style>
    </head>
    
    <body>
      <div id="lazy">
    
        <img data-src="images/1.jpg" src="images/pixel.gif" />
        <img data-src="images/2.jpg" src="images/pixel.gif" />
        <img data-src="images/3.jpg" src="images/pixel.gif" />
        <img data-src="images/4.jpg" src="images/pixel.gif" />
        <img data-src="images/5.png" src="images/pixel.gif" />
        <img data-src="images/6.jpg" src="images/pixel.gif" />
    
    
        <!--<img data-src="真实图片地址" src="小图片地址"/>
    	<img data-src="真实图片地址" src="小图片地址"/>-->
    
      </div>
      <script src="js/lazyload.js"></script>
      <script type="text/javascript">
      
        var lazyloading = lazyload({
          id: "lazy",
          //定义的加载时间
          lazyTime: 200,
          //定义的触发范围
          lazyRange: 100
        });
      </script>
    </body>
    
    </html>
    

    JS代码

    代码如下:

    function lazyload(options) {
    	var doc = options.id ? document.getElementById(options.id) : document;
    	if (doc === null) return;
    	
    	var tmp = doc.getElementsByTagName('img'),
    	tmplen = tmp.length,
    	imgobj = [];
    
    	for (var i = 0; i<tmplen; i++) {
    		var _tmpobj = tmp[i];
    		if (_tmpobj.getAttribute('data-src') !== null) {
    			if (isLoad(_tmpobj)) {
    				setimg(_tmpobj);
    			} else {
    				imgobj.push(_tmpobj);
    			}
    		}
    	}
    	var len = imgobj.length;
    	function handler() {
    		for (var i = 0,
    		end = len; i < end; i++) {
    			var obj = imgobj[i];
    			if (isLoad(obj)) {
    				_setimg(obj);
    				imgobj.splice(i, 1);
    				len--;
    				if(len===0){loadstop()}
    			}
    		}
    	}
    
    	function isLoad(ele) {
    		var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
    		if(typeof ele==='undefined') return false;
    		var edit = ~~ele.getAttribute("data-range") || options.lazyRange;
    		var clientHeight = scrollTop + document.documentElement.clientHeight + edit;
    		var offsetTop = 0;
    
    		while(ele.tagName.toUpperCase() !== 'BODY'){
            		offsetTop += ele.offsetTop;
            		ele = ele.offsetParent;
            	}
    		return (clientHeight > offsetTop);
    	}
    	function _setimg(ele) {
    		if (options.lazyTime) {
    			setTimeout(function() {
    				setimg(ele);
    			},
    			options.lazyTime + ~~ele.getAttribute('data-time'))
    		} else {
    			setimg(ele);
    		}
    	}
    	function setimg(ele) {
    
    		ele.src = ele.getAttribute('data-src');
    
    	}
    	function loadstop(){
    	window.removeEventListener ? window.removeEventListener("scroll", handler, false) : window.detachEvent("onscroll", handler);
    	}
        loadstop();
    	window.addEventListener ? window.addEventListener("scroll", handler, false) : window.attachEvent("onscroll", handler);
    }
    

    其中不是很熟悉的属性和方法

    • getAttribute
      • 获取指定属性名的属性值
    • scrollTop
      • 元素的顶部到视口可见内容(的顶部)的距离的度量。当一个元素的内容没有产生垂直方向的滚动条,那么他的scrollTop值为0 。
    • pageYOffset
      • 它会返回文档当前沿垂直轴(即向上或者向下)滚动的像素数。
    • clientHeight
      • 元素的高(不包括边框)padding+height,可以理解为元素可视区域的高度。
    • tagName
      • 返回元素的标签名 HTML 返回tagName属性值是大写的
    • offsetParent
      • 是距离调用offsetParent的元素最近的,已经进行过css定位的容器属性。如果没有定位,则取body元素的应用。元素的style设置为display:none时,offsetParent属性返回null
    • offsetTop
      • 获取对象相对于由offsetParent属性指定的父坐标距离顶端的高度
    • detachEvent
      • 不是w3c标准,通常为了适用于ie浏览器,谷歌、open也能使用,和removeEventListener作用基本相同,必须配合attachEvent使用。

    总结

    主要原理

    isLoad(ele) {
    		var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
    		if(typeof ele==='undefined') return false;
    		var edit = ~~ele.getAttribute("data-range") || options.lazyRange;
    		var clientHeight = scrollTop + document.documentElement.clientHeight + edit;
    		var offsetTop = 0;
    
    		while(ele.tagName.toUpperCase() !== 'BODY'){
            		offsetTop += ele.offsetTop;
            		ele = ele.offsetParent;
            	}
    		return (clientHeight > offsetTop);
    	}
    

    通过判断 clientHeight 和 offsetTop 作比较
    没有加载到的图片到body的顶部的距离 (使用的方法是while循环从图片的顶部到含有定位属性的父级的距离一级一级到达body) :offsetTop
    已经加载过的区域加上自定义向下触发的距离 :clientHeight

    展开全文
  • Android全局异常处理 ...(虽然闪退也用户不愿意看到的,但是在用户体验上明显比那个原生的弹窗好多了) 面试复习路线图 我之前复习,大多都在20点以后,因为晚上比较能集中注意力,制定一个学习计划,

    Android全局异常处理

    在做android项目开发时,大家都知道如果程序出错了,会弹出来一个强制退出的弹出框,这个本身没什么问题,但是这个UI实在是太丑了,别说用户接受不了,就连我们自己本身可能都接受不了。虽然我们在发布程序时总会经过仔细的测试,但是难免会碰到预料不到的错误。

    今天就来自定义一个程序出错时的处理,类似iphone的闪退。(虽然闪退也是用户不愿意看到的,但是在用户体验上明显比那个原生的弹窗好多了)

    面试复习路线图

    我之前复习,大多都在20点以后,因为晚上比较能集中注意力,制定一个学习计划,切勿零散的复习,最好是系统的复习,才能胜却在握

    主要内容如下:

    • BAT的面试题目相关
    • 性能优化相关相关
    • 多线程相关
    • Java相关
    • 源码解析相关
    • 网络编程相关
    • 算法合集相关
    • 数据结构相关
    • 设计模式相关
    • 一些小知识的总结

    4.1丶BAT相关面试点:
    • 1.Binder通信原理和机制
    • 2.多进程通信
    • 3.组件化.插件化的区别以及如何选择
    • 4.插件化的理解
    • 5.热修复原理
    • 6.对于AMS的认识
    • 7.AOP 与OOP 有什么区别, AOP 的原理
    • 8.QQ换肤原理以及大致思想
    • 9.Android虚拟机
    • 10.图片压缩的具体步骤和应用
    • 11.反编译和加密如何进行
    • 12.序列化和反序列化的原理
    • 13.Handler的原理和认识

    4.2丶算法合集笔记

    • 1.Hash
    • 2.最小生成树算法
    • 3.最短路径算法
    • 4.KMP算法
    • 5.查找算法
    • 6.排序算法
    4.3丶线程.多线程.线程池和面试中的小问题
    • 1.开启线程的方式
    • 2.run()和 start()方法区别
    • 3.如何控制某个方法允许并发访问线程的个数?
    • 4.在 Java 中 wait 和 seelp 方法的不同
    • 5.导致线程阻塞的原因
    • 6.线程如何关闭的思路?
    • 7.如何同步以及保证线程安全
    • 8.减少APK包的大小
    • 9.关于内存泄漏,内存抖动的优化以及解决方案
    4.4丶小知识的清单
    • 1.面向对象和面向对象的区别
    • 2.Java和C++的区别
    • 3.面向对象的特征
    • 4.接口和抽象类的区别
    4.5丶数据结构和设计模式
    • 1.设计模式六大原则简要概述
    • 2.设计模式的分类
    4.6丶java核心小知识清单
    • 1 .线程中 sleep 和 wait 区别
    • 2.Thread 中的 start()和 run()的区别
    • 3.Java 中重载和重写的区别
    • 4.Tcp /IP三次握手,四次挥手
    4.7丶性能优化
    • 1.图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理?
    • 2.WebView 的性能优化 ?
    • 3.加载一张高清图片应该占用多少内存
    • 4.内存泄露和内存溢出的区别 ?AS 有什么工具可以检测内存泄露
    • 5.Bitmap 如何处理大图,如何预防 OOM?
    • 6.性能优化,怎么保证应用启动不卡顿? 黑白屏怎么处理?
    4.8丶Android源码相关
    • 1、Android 属性动画实现原理
    • 2、补间动画实现原理
    • 3、Android 各个版本 API 的区别
    • 4、Requestlayout,onlayout,onDraw,DrawChild 区别与联系
    • 5、invalidate 和 postInvalidate 的区别及使用
    • 6、Activity-Window-View 三者的差别
    • 7、谈谈对 Volley 的理解
    • 8、如何优化自定义 View
    • 9、低版本 SDK 如何实现高版本 api?
    • 10、描述一次网络请求的流程
    • 11、HttpUrlConnection 和 okhttp 关系
    4.9丶Android 网络编程
    • 1丶网络分层
    • 2丶http 协议
    • 3丶http 的 get 和 post 的区别
    • 4丶socket 和 http 的区别
    • 5丶TCP 与UDP 区别总结
    • 6丶https
    • 7丶加密算法
    • 8丶Volley.OKHTTP.Retrofit等

    简历上写的项目,仔细认真的过一遍。还有就是关于业务的一些深层次的东西,得好好思考一下。

    一些开放性问题还是需要好好思考一下,顺便也准备一下 HR 面可能会问到的一些问题。

    在复习某个部分时可能会引出其它知识点,如果也不是很清楚的话也需要系统的再复习一下。

    知识体系比较广并且发展迅速,要注重基础基础才是最重要的

    尾声

    面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Android核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、热修复设计、插件化框架解读、组件化框架设计、图片加载框架、网络、设计模式、设计思想与代码质量优化、程序性能优化、开发效率优化、设计模式、负载均衡、算法、数据结构、高级UI晋升、Framework内核解析、Android组件内核等。

    不仅有学习文档,视频+笔记提高学习效率,还能稳固你的知识,形成良好的系统的知识体系。这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。

    Android进阶学习资料库

    一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!

    image

    大厂面试真题

    PS:之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

    《2017-2020字节跳动Android面试历年真题解析》

    如果需要PDF版本可以自行领取!

    aster/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)**

    展开全文
  • 原生js图片懒加载真对项目页面图片过多,加载慢,增强用户体验感的最佳解决方案 什么是懒加载? 懒加载顾名思义突出一个“懒”字,懒字就是拖延的意思,说白就是延迟加载。比如我们进入一个新的页面进行加载的时候...

    原生js图片懒加载是真对项目页面图片过多,加载慢,增强用户体验感的最佳解决方案

    什么是懒加载?

    懒加载顾名思义突出一个“懒”字,懒字就是拖延的意思,说白就是延迟加载。比如我们进入一个新的页面进行加载的时候,这个页面很长超过了屏幕可视区域的时候,那么懒加载就会优先加载我们可视区域可见的内容,剩余部分是当进入到可视区域之后再进行加载。

    为什么要用懒加载?

    懒加载是一种优化网页性能的一种方式,它极大的提高了用户的体验。举个栗子:就拿图片来说,一个网站,单个网页的页面上“图片”是构成页面主体的一个极大部分,但是在现在一张图片的大小超过几兆是一件很正常的事,那么就需要注意到一个问题:当用户在访问一个网页的时候就会请求所有图片资源,如果网速不够快的话,那么用户只能够看到一个空白的网页,或者一个不完整的结构布局,当图片加载完成后,估计用户早就走了。

    使用懒加载的原因

    1.全部加载用户体验差
    2.一次性全部加载浪费用户流量,也许只是访问部分内容,不是全部内容都能够访问完,全部加载的话,就有点浪费流量了。

    图片懒加载实现原理:

    网页占用资源较多的一般都是图片,进行懒加载的情况一般都是针对于图片来进行的图片懒加载,当然还有一种情况是路由懒加载,这里讲的还有实现原理主要是针对图片。
    在H5里面,图片的标签就是img,而图片的 src属性就是图片的来源地址。浏览器是否发起请求也是根据是否有img标签内是否有src属性来决定的。
    知道了这点我们就可以根据标签的src属性来进行操作了,在没进入可视区域的时候,我们先不给这个标签赋src属性,这样浏览器就不会发送请求了。

    代码实现:

    html部分:

    <!DOCTYPE html>
    <html>
    
    <head>
      <title>Demo-Lazyload</title>
      <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
      <style>
        img {
          height: 500px;
          width: 500px;
          display: block;
          background: url(images/loading.gif) no-repeat center;
          margin: 0 auto
        }
    
        #lazy {
          width: 800px;
          margin: 0 auto
        }
      </style>
    </head>
    
    <body>
      <div id="lazy">
        <img data-src="images/1.jpg" src="images/pixel.gif" />
        <img data-src="images/2.jpg" src="images/pixel.gif" />
        <img data-src="images/3.jpg" src="images/pixel.gif" />
        <img data-src="images/4.jpg" src="images/pixel.gif" />
        <img data-src="images/5.png" src="images/pixel.gif" />
        <img data-src="images/6.jpg" src="images/pixel.gif" />
    
    
        <!--<img data-src="真实图片地址" src="小图片地址"/>
    	<img data-src="真实图片地址" src="小图片地址"/>-->
    
      </div>
      <script src="js/lazyload.js"></script>
      <script type="text/javascript">
        var lazyloading = lazyload({
          id: "lazy",
          lazyTime: 200,
          lazyRange: 100
        });
      </script>
    </body>
    
    </html>
    

    js部分:

    function lazyload(options) {
    	var doc = options.id ? document.getElementById(options.id) : document;
    	if (doc === null) return;
    	var tmp = doc.getElementsByTagName('img'),
    	tmplen = tmp.length,
    	imgobj = [];
    
    	for (var i = 0; i<tmplen; i++) {
    		var _tmpobj = tmp[i];
    		if (_tmpobj.getAttribute('data-src') !== null) {
    			if (isLoad(_tmpobj)) {
    				setimg(_tmpobj);
    			} else {
    				imgobj.push(_tmpobj);
    			}
    		}
    	}
    	var len = imgobj.length;
    	function handler() {
    		for (var i = 0,
    		end = len; i < end; i++) {
    			var obj = imgobj[i];
    			if (isLoad(obj)) {
    				_setimg(obj);
    				imgobj.splice(i, 1);
    				len--;
    				if(len===0){loadstop()}
    			}
    		}
    	}
    
    	function isLoad(ele) {
    		var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
    		if(typeof ele==='undefined') return false;
    		var edit = ~~ele.getAttribute("data-range") || options.lazyRange;
    		var clientHeight = scrollTop + document.documentElement.clientHeight + edit;
    		var offsetTop = 0;
    
    		while(ele.tagName.toUpperCase() !== 'BODY'){
            		offsetTop += ele.offsetTop;
            		ele = ele.offsetParent;
            	}
    		return (clientHeight > offsetTop);
    	}
    	function _setimg(ele) {
    		if (options.lazyTime) {
    			setTimeout(function() {
    				setimg(ele);
    			},
    			options.lazyTime + ~~ele.getAttribute('data-time'))
    		} else {
    			setimg(ele);
    		}
    	}
    	function setimg(ele) {
    
    		ele.src = ele.getAttribute('data-src');
    
    	}
    	function loadstop(){
    	window.removeEventListener ? window.removeEventListener("scroll", handler, false) : window.detachEvent("onscroll", handler);
    	}
        loadstop();
    	window.addEventListener ? window.addEventListener("scroll", handler, false) : window.attachEvent("onscroll", handler);
    

    基本实现就是这样

    展开全文
  • 懒加载一种优化网页性能的一种方式,它极大的提高了用户的体验。举个栗子:就拿图片来说,一个网站,单个网页的页面上“图片”构成页面主体的一个极大部分,但是在现在一张图片的大小超过几兆一件很正常的事,...

    概念

    • 什么是懒加载

    懒加载顾名思义突出一个“懒”字,懒字就是拖延的意思,说白就是延迟加载。比如我们进入一个新的页面进行加载的时候,这个页面很长超过了屏幕可视区域的时候,那么懒加载就会优先加载我们可视区域可见的内容,剩余部分是当进入到可视区域之后再进行加载。

    • 为什么要懒加载?

    懒加载是一种优化网页性能的一种方式,它极大的提高了用户的体验。举个栗子:就拿图片来说,一个网站,单个网页的页面上“图片”是构成页面主体的一个极大部分,但是在现在一张图片的大小超过几兆是一件很正常的事,那么就需要注意到一个问题:当用户在访问一个网页的时候就会请求所有图片资源,如果网速不够快的话,那么用户只能够看到一个空白的网页,或者一个不完整的结构布局,当图片加载完成后,估计用户早就走了。

    所以这就是为什么要使用懒加载的原因

    总结出来有两个点:

    1. 全部加载用户体验差
    2. 一次性全部加载浪费用户流量,也许只是访问部分内容,不是全部内容都能够访问完,全部加载的话,就有点浪费流量了。
    • 懒加载实现原理(图片懒加载)

    网页占用资源较多的一般都是图片,进行懒加载的情况一般都是针对于图片来进行的图片懒加载,当然还有一种情况是路由懒加载,这里讲的还有实现原理主要是针对图片。

    在H5里面,图片的标签就是img,而图片的 src属性就是图片的来源地址。浏览器是否发起请求也是根据是否有img标签内是否有src属性来决定的。

    知道了这点我们就可以根据标签的src属性来进行操作了,在没进入可视区域的时候,我们先不给这个标签赋src属性,这样浏览器就不会发送请求了。

    实现过程代码实现如下:

    HTML部分

    <!DOCTYPE html>
    <html>
    
    <head>
      <title>Demo-Lazyload</title>
      <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
      <style>
        img {
          height: 500px;
          width: 500px;
          display: block;
          background: url(images/loading.gif) no-repeat center;
          margin: 0 auto
        }
    
        #lazy {
          width: 800px;
          margin: 0 auto
        }
      </style>
    </head>
    
    <body>
      <div id="lazy">
        <img data-src="images/1.jpg" src="images/pixel.gif" />
        <img data-src="images/2.jpg" src="images/pixel.gif" />
        <img data-src="images/3.jpg" src="images/pixel.gif" />
        <img data-src="images/4.jpg" src="images/pixel.gif" />
        <img data-src="images/5.png" src="images/pixel.gif" />
        <img data-src="images/6.jpg" src="images/pixel.gif" />
    
    
        <!--<img data-src="真实图片地址" src="小图片地址"/>
    	<img data-src="真实图片地址" src="小图片地址"/>-->
    
      </div>
      <script src="js/lazyload.js"></script>
      <script type="text/javascript">
        var lazyloading = lazyload({
          id: "lazy",
          lazyTime: 200,
          lazyRange: 100
        });
      </script>
    </body>
    
    </html>
    

    JS代码

    function lazyload(options) {
    	var doc = options.id ? document.getElementById(options.id) : document;
    	if (doc === null) return;
    	var tmp = doc.getElementsByTagName('img'),
    	tmplen = tmp.length,
    	imgobj = [];
    
    	for (var i = 0; i<tmplen; i++) {
    		var _tmpobj = tmp[i];
    		if (_tmpobj.getAttribute('data-src') !== null) {
    			if (isLoad(_tmpobj)) {
    				setimg(_tmpobj);
    			} else {
    				imgobj.push(_tmpobj);
    			}
    		}
    	}
    	var len = imgobj.length;
    	function handler() {
    		for (var i = 0,
    		end = len; i < end; i++) {
    			var obj = imgobj[i];
    			if (isLoad(obj)) {
    				_setimg(obj);
    				imgobj.splice(i, 1);
    				len--;
    				if(len===0){loadstop()}
    			}
    		}
    	}
    
    	function isLoad(ele) {
    		var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
    		if(typeof ele==='undefined') return false;
    		var edit = ~~ele.getAttribute("data-range") || options.lazyRange;
    		var clientHeight = scrollTop + document.documentElement.clientHeight + edit;
    		var offsetTop = 0;
    
    		while(ele.tagName.toUpperCase() !== 'BODY'){
            		offsetTop += ele.offsetTop;
            		ele = ele.offsetParent;
            	}
    		return (clientHeight > offsetTop);
    	}
    	function _setimg(ele) {
    		if (options.lazyTime) {
    			setTimeout(function() {
    				setimg(ele);
    			},
    			options.lazyTime + ~~ele.getAttribute('data-time'))
    		} else {
    			setimg(ele);
    		}
    	}
    	function setimg(ele) {
    
    		ele.src = ele.getAttribute('data-src');
    
    	}
    	function loadstop(){
    	window.removeEventListener ? window.removeEventListener("scroll", handler, false) : window.detachEvent("onscroll", handler);
    	}
        loadstop();
    	window.addEventListener ? window.addEventListener("scroll", handler, false) : window.attachEvent("onscroll", handler);
    }
    

    干看代码是有点难懂的,下面是我整理出的一些关键词汇,结合平常学习到的知识,大家应该能看懂

    • meta标签
      • http-equiv="Content-Type"
        • 提供了content属性的信息/值的HTTP头。
        • 可用于模拟一个HTTP响应头。
      • content="text/html"
        • 文档类型为文本html格式

    参考网址

    • getAttribute
    • 获取指定属性名的属性值
    • scrollTop
      • 元素的顶部到视口可见内容(的顶部)的距离的度量。当一个元素的内容没有产生垂直方向的滚动条,那么他的scrollTop值为0 。
    • pageYOffset
      • 它会返回文档当前沿垂直轴(即向上或者向下)滚动的像素数。
    • clientHeight
      • 元素的高(不包括边框)padding+height,可以理解为元素可视区域的高度。
    • tagName
      • 返回元素的标签名 HTML 返回tagName属性值是大写的
    • offsetParent
      • 是距离调用offsetParent的元素最近的,已经进行过css定位的容器属性。如果没有定位,则取body元素的应用。元素的style设置为display:none时,offsetParent属性返回null
    • offsetTop
      • 获取对象相对于由offsetParent属性指定的父坐标距离顶端的高度
    • detachEvent
      • 不是w3c标准,通常为了适用于ie浏览器,谷歌、open也能使用,和removeEventListener作用基本相同,必须配合attachEvent使用。

    简述路由懒加载概念:

    懒加载也叫延迟加载,即在需要的时候进行加载,随用随载

    在单页面应用中,如果没有引用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要加载的内容过多,延时过长,不利于用户体验,运用懒加载可以将页面进行划分,按需加载页面,可以分担首页所承担的加载压力,减少加载用时

    展开全文
  • 什么是SDK广告?

    千次阅读 2021-03-12 09:53:13
    付米聚合,创立于2015年,建有国内响应速度快、容量高、技术先进的移动...SDK的英文全名:software development kit,翻译成中文的意思就是“软件开发工具包”通俗一点的理解,指由第三方服务商提供的实现软件产品
  • 一.什么是懒加载?懒就是拖延迟的意思,所以...懒加载一种网页性能优化的方式,它能极大的提升用户体验。就比如说图片,图片一直影响网页性能的主要元凶,现在一张图片超过几兆已经很经常的事了。如果每次进入...
  • 一.什么是懒加载?懒就是拖延迟的意思,所以...懒加载一种网页性能优化的方式,它能极大的提升用户体验。就比如说图片,图片一直影响网页性能的主要元凶,现在一张图片超过几兆已经很经常的事了。如果每次进入...
  • Vite 利用浏览器原生的 ES 模块支持和用编译到原生的语言开发的工具(如 esbuild)来提供一个快速且现代的开发体验。 Vite由两个主要部分组成: 一个通过本机 ES 模块提供源文件的开发服务器,具有丰富的内置特性和...
  • 可能很多人不知道PWA是什么意思这里简单科普一下PWA是Progressive Web App(渐进式网页应用)的缩写是谷歌最近几年推行的一种增强web app使用体验的理念简单点说就是让你在浏览网页的时候获得跟使用原生相近的体验比如...
  • PWA的全称Progressive Web App, 意思是渐进式网络编程,这Google提出的使用前沿的技术为网页提供原生app体验的技术解决方案.它其实并没有什么魔法,而是使用如Service Worker, Promise, fetch, cache API, ...
  • 关于状态Provider笔记

    2020-07-03 22:14:50
    百度了一下,为了优化代码提高性能,我自己的理解这样的,优化性能,使用了provider可以指定刷新作用域,就是在一定程度上提高了性能,本来flutter就是堪比原生性能(意思是还是差一点),所以为了提高用户体验度...

空空如也

空空如也

1 2 3
收藏数 50
精华内容 20
关键字:

原生体验是什么意思