❝如果你有梦想的话
就要去捍卫它
❞
前言
人生苦短,必须性感! 嘻嘻嘻 (#^.^#)
1 Image
懒加载 lazy
代码片段
<img
...
:src="src"
:style="imageStyle"
:class="{ 'el-image__inner--center': alignCenter, 'el-image__preview': preview }">
mounted() {
if (this.lazy) {
this.addLazyLoadListener();
} else {
this.loadImage();
}
}
addLazyLoadListener() {
...
if (_scrollContainer) {
this._scrollContainer = _scrollContainer;
this._lazyLoadHandler = throttle(200, this.handleLazyLoad);
on(_scrollContainer, 'scroll', this._lazyLoadHandler);
this.handleLazyLoad();
}
}
handleLazyLoad() {
if (isInContainer(this.$el, this._scrollContainer)) {
this.show = true;
this.removeLazyLoadListener();
}
}
watch: {
show(val) {
val && this.loadImage();
}
}
loadImage() {
...
const img = new Image();
img.onload = e => this.handleLoad(e, img);
img.onerror = this.handleError.bind(this);
...
img.src = this.src;
}
技巧解析
❝懒加载,意味着平时摸鱼,领导视察时认真一下下啦
❞
如果图片不在容器中,src为空
如果图片在容器中,给src赋值
怎么知道是否在容器中呢?
下面的小工具告诉你 ^_^
安全策略 Referrer
代码片段
<img
href="http://example.com/img/1.png"
referrerpolicy="origin">
技巧解析
❝想知道我从哪里来的吗?
❞
no-referrer,就不告诉你
origin,稍微给你一点提示吧
same-origin,既然是老乡,就告诉你吧
更多好玩的,传送门发给你
Referrer-Policy 传送门
小工具
isInContainer
代码片段
elRect.top<containerRect.bottom
elRect.bottom > containerRect.top
/*
* @ {desc} 图片元素在容器中
* @ {params} el-图片 container-容器
* @ {example}
1.elRect.top < containerRect.bottom
图片进入容器,图片顶部触及容器底部
2.elRect.bottom > containerRect.top
图片离开容器,图片底部触及容器顶部
*/
export const isInContainer = (el, container) => {
if (isServer || !el || !container) return false;
const elRect = el.getBoundingClientRect();
let containerRect;
if ([window, document, document.documentElement, null, undefined].includes(container)) {
containerRect = {
top: 0,
right: window.innerWidth,
bottom: window.innerHeight,
left: 0
};
} else {
containerRect = container.getBoundingClientRect();
}
return elRect.top < containerRect.bottom &&
elRect.bottom > containerRect.top &&
elRect.right > containerRect.left &&
elRect.left < containerRect.right;
};
「因为Ta」 「我才是现在的我」
参考链接
往期回顾
- 跟随Element学习Vue小技巧(1)——Layout
- 跟随Element学习Vue小技巧(2)——Container
- 跟随Element学习Vue小技巧(7)——Button
- 跟随Element学习Vue小技巧(8)——Link
- 跟随Element学习Vue小技巧(9)——Radio
- 跟随Element学习Vue小技巧(10)——Checkbox
- 跟随Element学习Vue小技巧(11)——Input
- 跟随Element学习Vue小技巧(12)——InputNumber
- 跟随Element学习Vue小技巧(13)——Select
- 跟随Element学习Vue小技巧(14)——Cascader
- 跟随Element学习Vue小技巧(15)——Switch
- 跟随Element学习Vue小技巧(16)——Slider
- 跟随Element学习Vue小技巧(17)——TimePicker
- 跟随Element学习Vue小技巧(18)——DatePicker
- 跟随Element学习Vue小技巧(20)——Upload
- 跟随Element学习Vue小技巧(21)——Rate
- 跟随Element学习Vue小技巧(23)——Transfer
- 跟随Element学习Vue小技巧(24)——Form
- 跟随Element学习Vue小技巧(25)——Table
- 跟随Element学习Vue小技巧(26)——Tag
- 跟随Element学习Vue小技巧(27)——Progress
- 跟随Element学习Vue小技巧(28)——Tree
- 跟随Element学习Vue小技巧(29)——Pagination
- 跟随Element学习Vue小技巧(31)——Avatar
- 跟随Element学习Vue小技巧(33)——Loading
- 跟随Element学习Vue小技巧(34)——Message
- 跟随Element学习Vue小技巧(36)——Notification
- 跟随Element学习Vue小技巧(37)——Menu
- 跟随Element学习Vue小技巧(38)——Tabs
- 跟随Element学习Vue小技巧(39)——Breadcrumb
- 跟随Element学习Vue小技巧(41)——Dropdown
- 跟随Element学习Vue小技巧(42)——Steps
- 跟随Element学习Vue小技巧(43)——Dialog
- 跟随Element学习Vue小技巧(44)——Tooltip
- 跟随Element学习Vue小技巧(45)——Popover
- 跟随Element学习Vue小技巧(48)——Carousel
- 跟随Element学习Vue小技巧(49)——Collapse
- 跟随Element学习Vue小技巧(50)——Timeline
- 跟随Element学习Vue小技巧(52)——Calendar