转:
  Vue图片懒加载原理和实现
  Vue 中实现图片预加载 + 懒加载原理实现

Vue图片懒加载原理及实现

原理分析

  先将img标签的src链接设为同一张图片(默认图片),当js监听到该图片进入可视窗口时,再将实际地址应用。

实现方法

1.判断元素是否在可视范围
1
2
3
4
5
6
7
8
9
10
11
12
/**
* 判断元素是否在可视范围
*/
function isVisible(ele){
let windowHeight = window.innerHeight
let position = ele.getBoundingClientRect()
// 当元素的top偏移量小于页面大小并且大于高度的负数
if(position.top<windowHeight && position.top>-position.height){
return true
}
return false
}
2.对图片实现懒加载
1
2
3
4
5
6
7
8
9
10
/**
* 对图片进行懒加载
*/
function lazyLoad(img, src){
if(img && src && isVisible(img)){ // 元素存在,元素未被加载,元素可见
setTimeout(function(){
img.setAttribute('src', src)
}, 1000) // 模拟网络请求
}
}
3.添加滚动监听
1
2
3
4
// 窗口滚动
window.addEventListener('scroll', function(){
lazyLoad(img, src)
})

Vue插件实现代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/**
* 判断元素可见
*/
function isVisible(el){
let windowHeight = window.innerHeight
let position = el.getBoundingClientRect()
// 当元素的top偏移量小于页面大小并且大于高度的负数
if(position.top<windowHeight && position.top>-position.height){
return true
}
return false
}

/**
* 对图片进行懒加载
*/
function lazyLoad(img, src){
if(img && src && isVisible(img)){ // 元素存在,元素未被加载,元素可见
setTimeout(function(){
img.setAttribute('src', src)
}, 1000) // 模拟网络请求慢的情况
}
}

export default {
install(Vue, options){
Vue.directive('lazy', {
bind: function(el, binding, vnode){
el.setAttribute('src', options.loading)
window.addEventListener('scroll', function(){
lazyLoad(el, binding.value)
})
},
inserted: function(el, binding, vnode){
lazyLoad(el)
}
})
}
}

  main.js
Vue.use(myPlugin, {loading: defaultImg})

在Vue中使用 vue-lazyload插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1.安装插件
npm install vue-lazyload --save-dev

2.在入口文件main.js中引入并使用
import VueLazyload from 'vue-lazyload'

直接使用
Vue.use(VueLazyload)

或者添加自定义选项
Vue.use(VueLazyload, {
preLoad: 1.3,
error: 'dist/error.png',
loading: 'dist/loading.gif',
attempt: 1
})

3.修改图片显示方式为懒加载(将 :src 属性直接改为v-lazy)
<a href="javascript:;">
<img v-lazy="'/static/img/' + item.productImage">
</a>

评论和共享

AJAX

发布在 AJAX

AJAX简介

  AJAX全称为“Asynchronous Javascript And XML”, 即“异步JavaScript和XML”的意思。通过AJAX我们可以向服务器发送请求,在不阻塞页面的情况下进行数据交互,也可以理解为异步数据传输。在AJAX的帮助下我们的网页只需局部刷新即可更新数据的显示,减少了不必要的数据量,大大提高了用户体验,缩短了用户等待的时间,使得web应用程序更小、更快,更友好。

阅读全文

数据埋点

发布在 前端

数据埋点

定义

  所谓埋点就是在应用中特定的流程收集一些信息,用来跟踪应用使用的状况,后续用来进一步优化产品或是提供运营的数据支撑,包括访问数(Visits),访客数(Visitor),停留时长(Time On Site),页面浏览数(Page Views)和跳出率(Bounce Rate)。这样的信息收集可以大致分为两种:页面统计(track this virtual page view),统计操作行为(track this button by an event

方法

现在埋点的主流有两种方式:
  第一种:自己公司研发在产品中注入代码统计,并搭建起相应的后台查询。
  第二种:第三方统计工具,如友盟、神策、TalkingdataGrowingIO等。

指标

阅读全文

(无标题)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
【百度-母婴业务部-前端】校招提前批内推
lanjianguo@baidu.com
1.姓名2.邮箱3.手机号4.简历5.推荐词(选填)
坑位有限,先到先得,截止到8月14日。
百度招聘官网:https://talent.baidu.com/external/baidu/campus.html


旷视科技
sihaiyang@megvii.com
发邮件时请注明岗位和工作地点,默认北京,正文请备注自己的姓名、邮箱、手机号。附件为简历,简历建议命名为:姓名-学校-手机号。


陌陌
https://uploadfiles.nowcoder.com/images/20190715/340047502_1563204023495_E4050D8294A27655000FDBF912B1FD08
1.打开下方二维码(用微信扫描)
2.选择自己对应的岗位
3.扔简历
4.内推完成
https://app.mokahr.com/recommendation-apply/immomo/2050/?recommenderId=192152&hash=%23%2Fjobs%3Fkeyword%3D2020%26page%3D1%26isCampusJob%3D1%26_k%3D4v9ivu


快手
867326226@qq.com


贝壳找房
23107689内推人:莫健锋
http://campus.ke.com/Campus
岗位 下划线 姓名 下划线 学校.pdf


拼多多
xulongxiang@pinduoduo.com
2020届学霸批+姓名+学校+岗位.pdf
上海 web前端研发工程师


商汤研究院招前端-cv实习生
sunjiaming@sensetime.com


阿里巴巴[秋招]
qijin.hq@alibaba-inc.com
【秋招内推】 姓名_学校_专业_L7GT


QQ音乐提前批来啦招聘web前端工程师
坐标深圳,qqmusic_fe@outlook.com


星环科技
前端开发工程师(实习生)
扫描二维码,关注“星环科技招聘”,选择“星招聘”,进入校园招聘页面,
选择你心仪的岗位进行投递

评论和共享

前端-面试题

发布在 前端

简单自我介绍, 做过哪些项目, 使用哪些技术栈 ?
如何看待前端框架选型 ?
vue的如何实现双向绑定的 ?
react 虚拟DOM 是什么? 如何实现? 说一下diff算法 ?
工作中最出色的点, 和你最头疼的问题 如何解决的 ?
平时如何学习, 最近接触了解了哪些新的知识 ?
技术一面
简单自我介绍, 介绍一下你的项目, 技术栈 ?
react和vue的比较 ?
React Diff 算法 ?
观察者模式实现 ?
http报文头部有哪些字段? 有什么意义 ?
移动端高清方案如何解决 ?
webpack的原理, loader 和 plugin 是干什么的? 有自己手写过么 ?
简述从网页输入url到网页展示的过程发生了哪些事情 ?
SSR 和 客户端渲染有什么区别 , vue是如何实现绑定事件的 ?
简述公司node架构中容灾的实现 ?
浏览器事件有哪些过程? 为什么一般在冒泡阶段, 而不是在捕获阶段注册监听? addEventListener 参数分别是什么 ?
面向对象如何实现? 需要复用的变量 怎么处理 ?
移动端300ms延时的原因? 如何处理?
主流框架的数据单向/双向绑定实现原理 ?
简述转行经历, 如何学习 ?
你觉得自己在前端工作的最大的优点是什么 拿实际工作的内容举例?
技术二面
和一面前3问基本一致,简述项目,React vue区别 virsualDOM实现
DIFF算法为什么是O(n)复杂度而不是O(n^3)
http code码?
移动端rem布局如何实现? 简述原理?
JSbridge原理, js和native是如何通信的?
Rollup和webpack区别, treeshaking是什么?
TCP三次握手的过程, get post请求的区别 ?
静态文件的浏览器缓存如何实现?
前端跨域方案
http 请求包含哪些字段 分别是什么意思
js 有哪些数据类型 如何判断? null 和 undefined区别 应用场景?
new String(‘a’) 和 ‘a’ 是一样的么?
移动端如何实现下拉到底部 跟随移动 结束后回弹的动画?
移动端如何优化首页白屏时间过长 ?
ES6 generator函数简述
数组去重实现?
js浮点数运算不精确 如何解决?
工作中最得意和出色的点, 头疼的点, 问题如何解决的
为何换工作?
聊了下阿里的压力,文化
技术三面
公司的前端工程化实践
转行之后是如何自学前端的, 学习途径 有没有一些自己的代码
DOM基础知识,添加元素,删除元素等等…
DOM节点类型
正则表达式如何匹配一段url ?在正则表达式中有哪几种作用?
移动端优化方式? 离线包是如何实现的?

https://ustbhuangyi.github.io/vue-analysis/

我的手机 2019/3/14 10:04:34
https://www.jianshu.com/p/a804606ad8e9

我的手机 2019/3/14 10:04:50
https://www.cnblogs.com/chinabin1993/p/9115396.html

我的手机 2019/3/14 10:05:03
https://segmentfault.com/a/1190000012996217

我的手机 2019/3/14 10:05:20
https://blog.csdn.net/qq_35430000/article/details/79291287

我的手机 2019/3/14 10:05:37
https://m.jb51.net/article/140581.htm

https://yukwan.cn/fronttech/front-end/
2019/3/8 16:31:10
我的手机 2019/3/8 16:31:10
https://mp.weixin.qq.com/s/L8P0RIXym4myfknzM5Nsog
2019/3/9 16:28:42
我的手机 2019/3/9 16:28:42
https://campushr.hikvision.com/JobDetails.html?id=057c01652bb444b597345337c7b8c14f&type=0

https://wx2.sinaimg.cn/mw690/005NaMhPly1g0nayy8lbij30hs59p7wh.jpg?from=singlemessage

2019-07-21

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
1. 说一下CSS盒模型
标准盒模型和IE怪异盒模型,然后提到了设置 box-sizing 可以转换及一些常见应用场景(这题过)
2. 怎样让一个元素水平垂直居中
3. 知道什么是同源策略吗
4. 那怎么解决跨域问题
5. 知道 JSONP 原理吗
6. 怎么检测浏览器中的内存泄漏
7. 如果要让你给 chrome 写一个插件检测内存泄漏说一下你的思路
8. 重绘和重排的区别
9. 知道浏览器事件机制吗
10. 从输入一个URL到页面加载完成发生了什么
11. 计算机网络了解吗?OSI七层模型?选择一个比较熟悉的层,介绍一下有哪些协议
12. DNS的运行过程,DNS性能优化有哪些方法
13. 写代码:给一个淘宝的页面,写一下大概如何布局
14. 写代码,DOM操作将所有页面元素存为一个{key:count}的结构,即统计在页面中每种元素的数量,将元素根据count进行排序。
15. 垃圾回收机制
16. https和http区别,对称加密和非对称加密区别
17. http1.0和http1.1和http2.0
18. CSS盒模型(box-sizing属性)
19. 写代码:多维数组展为一维数组(如:[[1,2],3,[4,5,6],[7,8]]->[1,2,3,4,5,6,7,8])
20. 写代码:自己实现一个instanceof
21. 对于原型链的理解,new的过程中发生了什么,写代码:自己实现一个new
22. Vue双向绑定的原理
23. Vue双向绑定的原理
24. Vue组件间的通信
25. CSS雪碧图是什么
26. 重绘和重排,哪些属性会触发重绘,哪些属性会触发重排
27. ES6中let,const,var的区别
28. map,forEach的区别
29. 跨域有哪些方法
30. 写代码:多维数组展开成一维数组,分析算法的时间复杂度,用es6的什么方法可以实现(flat)
31. 写代码:数组去重有哪些方法
32. 写代码:用闭包实现add()函数,第n次调用的时候输出n
33. this的指向问题:
var a=2; var obj={ a:1, b:this.a, fun:function(){ console.log(this.b); } }
输出结果为2,分析原因
34. 写代码:实现call函数
35. TCP三次握手,为什么是三次
36. http请求包括什么,http应答包括什么
37. 了解哪些状态码
38. 输入url到页面出现发生了什么
39. 浏览器渲染机制
40. 什么是同源策略(如何判断是否同源),CORS策略
41. CSS实现三角形,箭头
42. CSS垂直居中的方法
43. CSRF和XSS是什么,如何预防
44. localStorage和sessionStorage区别,localStorage最大存储量
45. CORS机制
46. Chrome调试断点如何设置
47. TCP三次握手,为什么不是四次,为什么不是两次
48. 浏览器渲染机制,js阻塞加载
49. js动态加载,eval()方法
50. 写代码:请求一个require.js文件,并统计文件中'require'的数量,分析时间复杂度,如何优化
51. 为什么想做前端,平时如何学习前端,知不知道社区里有哪些大神,讲讲最近看的一些前端相关的知识
52. 自己对前端未来发展方向是什么
53. 如何实现一个轮播图效果
54. CSS3新特性了解哪些
55. js数组的方法、对象的方法
56. Flex布局
57. js闭包
58. json是什么,为什么要用json
59. ajax元素操作的步骤
60. 数组排序的方法有哪些?说一下归并
61. 数组深拷贝
62. 从后端返回一个很大的数组,如何实现分页显示(通过数组下标进行对应)
63. 如何实现一个下划线(和text-decoration里的underline不一样),答案:用box-shadow
64. 单页应用有什么好处
65. 如何判断一个链表是否有环
66. 一个二叉树中找到两个节点的最小公共父节点
67. js闭包是什么,什么是内存泄漏,如何解决内存泄漏问题
68. js垃圾回收机制
69. 原生ajax原理,ajax和fetch的区别,fetch支持http的哪些方法
70. option方法可以发送那些内容
71. CSS的display有哪些取值
72. iso七层模型,每一层模型的经典协议
73. es6新增的数组方法
74. 数组的reduce方法
75. js中找到一个数组最大值的方法,分析复杂度
76. MVC和MVVM的区别,MVVM的优点
77. flex布局用在哪些场景下
78. 如何适配不同的屏幕
79. HTTP状态码有哪些
80. cookie,localStorage,sessionStorage的区别
81. es6的let,const和var区别,const绑定的对象能不能修改属性值
82. Vue数组双向绑定的原理,数组中没有get和set方法,应该如何实现数据劫持
83. event-loop原理,宏任务,微任务有哪些
84. 如何实现水平垂直居中(元素定长和不定长)
85. position有哪些属性,有什么区别,除了定位上的不同还有什么区别
86. Vue组件中的data为什么是函数
87. Vue双向数据绑定的原理
88. webpack怎么用,实现机制
89. Vuex相关
90. 一个网站图片很多,加载很慢,应该如何优化:DOMContentLoad,图片懒加载,CDN
91. Vue的watch和computed区别
92. CSS选择器优先级
93. es5实现继承
94. 一个页面加载不出来可能是那些方面的原因
95. setTimeout和Promise的区别,如何实现Promise
96. HTTP持续连接实现原理
97. 了解哪些设计模式
98. jQ选择器的实现原理
99. Vue中虚拟DOM解决什么问题,原理?
100. http协议是什么,请求和响应的构成,如何区分一个请求的头部和实体(中间有一个空行)
101. http有哪些方法,为什么要有这些方法(语义化)
102. 状态码3开头的有哪些,浏览器收到301和302怎么做,304用在哪些场景
103. cookie相关,cookie用在什么场景,cookie有哪些性质
104.

评论和共享

(无标题)

前端代码命名规则

命名规则

  • 项目命名
  • 目录/文件夹命名
  • JavaScript文件命名
  • css (scss、less、stylus)文件命名
  • html文件命名

HTML文件代码规范

  • 语法 (缩进,dom属性命名规范,单双引号的运用)
  • lang 属性
  • 字符串编码
  • IE兼容模式
  • CSS 引入方式
  • JavaScript 文件引入顺序
  • 避免 dom 标签嵌套的层级过多

CSS 文件代码规范

  • 缩进
  • 分号
  • 空格
  • 换行
  • 注释方案
  • 命名
  • 媒体查询
  • ….

JavaScript 文件代码规范

  • 缩进、空格、换行、注释…
  • 变量命名
  • 函数引用
  • 数组对象

评论和共享

Copyrights © 2019 LittleStar. All Rights Reserved. 载入天数...载入时分秒...
字数统计:147.2k
作者的图片

LittleStar

纵豆蔻词工,青楼好梦,难赋深情


程序员


China