前端小技巧集锦【持续更新中……】

记录一下前端开发过程中遇到的一些小问题以及解决方法。

 

目录

目录

最近更新

2019/10/23:在控制台使用document.designMode帮助进行调试

知识汇总

▍HTML篇

一、加快audio标签音乐加载

▍CSS篇

一、图片剪裁防止图片变形

二、消除input框选中时外边框

三:带有透明度的渐变

四:a标签的四个伪类定义顺序

五、流光字

六:使用伪元素制作带三角的气泡

七:一个元素连续执行多个动画

八:段落首行缩进

九:滚动条强制显示

▍JS篇

一、捕获键盘输入事件

二、DIV自动滚动到底部

三、JS/JQuery获取元素到浏览器顶部的距离

四、监听H5运行在前台还是后台

五、解决ios12的微信上键盘收起后,页面不滑动的问题

六、在控制台使用document.designMode帮助进行调试


 

 

最近更新

2019/11/28:滚动条强制显示

 

知识汇总

 

▍HTML篇

 

一、加快audio标签音乐加载

示例:

<audio
    id="audio"
    autoPlay
    preload="meta"
    src={BG_MUSIC}
    loop
></audio>

原理:给preload设置确定的属性值,例如音频设为“meta”

 

▍CSS篇

 

一、图片剪裁防止图片变形

示例:

.icon-container img {
	width: 150px;
	height: 150px;
	object-fit: cover;
	border-radius: 50%;
}

效果:

 

二、消除input框选中时外边框

示例:

.right .input-container .input-content input {
	border: 0;
	padding: 10px;
	width: 100%;
	height: 100%;
	box-sizing: border-box;
	/* 去除input框外边框  */
	outline: none;
	font-size: 18px;
}

效果:

 

三:带有透明度的渐变

示例:

background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 1));

效果:

 

四:a标签的四个伪类定义顺序

示例:css

a:link {
	color: white;
}
/* 未被访问的链接 */

a:visited {
	color: #00FF00;
}
/* 已被访问的链接 */

a:hover {
	color: #FF00FF;
}
/* 鼠标指针移动到链接上 */

a:active {
	color: #0000FF;
}
/* 正在被点击的链接 */

 

五、流光字

示例:

span {
	font-family: "微软雅黑";
	font-size: 22px;
	line-height: 50px;

        /*关键代码*/
	background-image: -webkit-linear-gradient(left, #147B96, #E6D205 25%, #147B96 50%, #E6D205 75%, #147B96);
	-webkit-text-fill-color: transparent;
	-webkit-background-clip: text;
	-webkit-background-size: 200% 100%;
	-webkit-animation: masked-animation 4s infinite linear;
}

/*关键代码*/
@-webkit-keyframes masked-animation {
	0% {
		background-position: 0 0;
	}
	100% {
		background-position: -100% 0;
	}
}

演示地址

http://hbuecx.club/tool/dayAWord

 

六:使用伪元素制作带三角的气泡

示例:

.reat{
  margin: 100rpx;
  width: 400rpx;
  height: 400rpx;
  border: 1rpx solid #AAA;
  position: relative;
}

.reat::before{
  content: '';
  position: absolute;
  top: -40rpx;
  left: 190rpx;
  width: 0;
  height: 0;
  font-size: 0;
  border-width: 20rpx;
  border-style: solid dashed dashed;
  border-color: transparent transparent #AAA;
}

.reat::after{
  content: '';
  position: absolute;
  top: -35rpx;
  left: 190rpx;
  width: 0;
  height: 0;
  font-size: 0;
  border-width: 20rpx;
  border-style: solid dashed dashed;
  border-color: transparent transparent white;
}

效果:

实现原理:将::before和::after都使用border构造成三角形,设置::before伪元素的边框颜色与主体区域边框颜色一致,设置::after伪元素的边框颜色与页面底色一致,然后使用::after伪元素遮盖部分::before伪元素,流出最外层边线,这样上面的效果就形成了。

 

七:一个元素连续执行多个动画

示例:

.demo {
    -webkit-animation-name: bounceInLeft1, bounce1;
    -webkit-animation-duration: 2s, 1.5s;
    -webkit-animation-timing-function: ease, linear;
    -webkit-animation-delay: 5.2s, 7.2s;
    -webkit-animation-iteration-count: 1, infinite;
    -webkit-animation-fill-mode: forwards, none;
    
    animation-name: bounceInLeft1, bounce1;
    animation-duration: 2s, 1.5s;
    animation-timing-function: ease, linear;
    animation-delay: 5.2s, 7.2s;
    animation-iteration-count: 1, infinite;
    animation-fill-mode: forwards, none;
}

原理:同时设置多个动画,利用延时实现动画效果

 

八:段落首行缩进

示例:

.demo {
    text-indent: 2em;  /*em是相对单位,2em即现在一个字大小的两倍*/
}

原理:text-indent可以使得容器内首行缩进一定单位

 

九:滚动条强制显示

浏览器默认在不滚动的时候会隐藏滚动条,虽然这个设计非常好。但是偶尔我们在产品设计中需要让我们的滚动条始终显示,这就需要我们去自定义样式了。

示例:

// 隐藏默认的滚动条
.ant-table-body::-webkit-scrollbar {
    -webkit-appearance: none;
}

// 设置垂直滚动条宽度
.ant-table-body::-webkit-scrollbar:vertical {
    width: 11px;
}

// 设置水平滚动条高度
.ant-table-body::-webkit-scrollbar:horizontal {
    height: 11px;
}

// 自定义滚动条样式
.ant-table-body::-webkit-scrollbar-thumb {
    border-radius: 8px;
    border: 2px solid white; /* should match background, can't be transparent */
    background-color: rgba(0, 0, 0, 0.5);
}

 

 

▍JS篇

 

一、捕获键盘输入事件

示例:

document.onkeydown = function(event) {
	var e = event || window.event || arguments.callee.caller.arguments[0];
	if(e && e.keyCode == 27) { // 按 Esc 
		// 要做的事情
	}
	if(e && e.keyCode == 113) { // 按 F2 
		// 要做的事情
	}
	if(e && e.keyCode == 13) { // enter 键
		// 要做的事情
	}
};

附录:常用键盘键码

键码对应键盘键
8Backspace
9Tab
12Clear
13Enter
16Shift
17Control
18Alt
35End
36Home
37Left
38Up
39Right
40Down
46Delete
47Help
480
491
502
513
524
535
546
557
568
579
65a
66b
67c
68d
69e
70f
71g
72h
73i
74j
75k
76l
77m
78n
79o
80p
81q
82r
83s
84t
85u
86v
87w
88x
89y
90z
96KP_0
97KP_1
98KP_2
99KP_3
100KP_4
101KP_5
102KP_6
103KP_7
104KP_8
105KP_9
键码对应键盘键
112F1
113F2
114F3
115F4
116F5
117F6
118F7
119F8
120F9
121F10
122F11
123F12
124F13
125F14
126F15
127F16
128F17
129F18
130F19
131F20
132F21
133F22
134F23
135F24

 

二、DIV自动滚动到底部

示例:css

.right .chat-container {
	padding: 10px;
	height: 80%;
	overflow-y: scroll;
	box-sizing: border-box;
}

js:关键代码

$(".chat-container").scrollTop($(".chat-container")[0].scrollHeight);

【注意】无论是id选择器还是class选择器都要加[0]。

 

三、JS/JQuery获取元素到浏览器顶部的距离

示例:

// 原生JS
// 获取div距离顶部的距离
var mTop = document.getElementsByClassName('mdiv')[0].offsetTop;
// 减去滚动条的高度
var sTop = document.body.scrollTop;
var result = mTop - sTop;
console.log(result);

// Jquery
mTop = $('.mdiv')[0].offsetTop;
sTop = $(window).scrollTop();
result = mTop - sTop;
console.log(result);

提升篇:及时获取滚动条滚动过程中元素到浏览器顶部的距离

// 全局滚动条
window.onscroll = function() {
	getScrollTop();
};

// 特定容器内部滚动条
document.getElementById("container").onscroll = function() {
    getScrollTop();
};

function getScrollTop(){
    // 原生JS
    // 获取div距离顶部的距离
    var mTop = document.getElementsByClassName('mdiv')[0].offsetTop;
    // 减去滚动条的高度
    var sTop = document.body.scrollTop;
    var result = mTop - sTop;
    console.log(result);

    // Jquery
    mTop = $('.mdiv')[0].offsetTop;
    sTop = $(window).scrollTop();
    result = mTop - sTop;
    console.log(result);
}

 

四、监听H5运行在前台还是后台

示例:当页面运行在后台的时候,关闭音乐;当页面运行在前台的时候,打开音乐

const audio = document.getElementById('audio');
document.addEventListener('qbrowserVisibilityChange', function (e) {
    if (audio) {
        if (e.currentTarget.hidden) {
            audio.pause();
        } else if (self.state.isPlayMusic) {
            audio.play();
        }
    }
}, true); 
document.addEventListener('visibilitychange', function (e) {
    if (audio) {
        if (e.currentTarget.hidden) {
            audio.pause();
        } else if (self.state.isPlayMusic) {
            audio.play();
        }
    }
}, true);

原理:设置监听器,监听页面显示的变化

 

五、解决ios12的微信上键盘收起后,页面不滑动的问题

示例:

function isIos12() {
    const ua = navigator.userAgent.toLowerCase();
    const osReg = /iphone|ipad/;
    const versionReg = /os (\d+)_/;
    if (!ua.match(osReg)) return false;
    return Number(ua.match(versionReg)[1]) === 12;
}

// 解决ios12的微信上键盘收起后,页面不滑动的问题
function scrollPage() {
    if (isIos12()) {
        const pageTop = $(window).scrollTop();
        window.scrollTo(0, pageTop + 1);
    }
}

 

六、在控制台使用document.designMode帮助进行调试

示例:

在控制台更改其属性值完成后,就可以自由编辑页面里的元素了,快去试试吧。

 

关注微信公众号:爱唱歌的蜗牛先生

 

 

  • 8
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值