这18个网站是我在取经路上意外发现的,里面包括 纯CSS 实现的炫酷背景,还有专门制作背景图的网站。 算是取经路上的大补之物~
? 传送门:https://projects.verou.me/css3patterns/
如果你认识 Lea Verou 的话,大概率知道这个网站,她徒手写了几十个 纯CSS 实现的背景图样式。 网站上提供了她的代码。
如果你不认识她,那我一定要推荐你阅读一下 《CSS揭秘(图灵出品)》 这本书,它会让你大受震撼!
? 传送门:http://www.standardista.com/cssgradients/
除了 Lea Verou 的网站外,CSS3 Gradients 也提供了这类示例。同样提供代码下载。
? 传送门:https://bennettfeely.com/gradients/
功能和前面两个差不多,自己点开看看呗~
? 传送门:http://www.standardista.com/CSS3gradients/flags.html
使用 纯CSS 的方式画出多国国旗。“右键 - 检查网页源代码” 可以获取代码。
? 传送门:https://heropatterns.com/
Hero Patterns 是比较出名网站了,官方提供了几十款纹理,你可以根据自己的需求设置两种对比色和不透明度。 完成后会返回一段CSS代码给你,不过和前面几个网站有点不同的是,Hero Patterns 的背景图使用了 base64 的方式去实现的,而不是 CSS 背景渐变 的方式。
? 传送门:http://evankarageorgos.github.io/hue/grid.html
使用 CSS 背景渐变 的方式做出的数十款高端大气的背景,网站上的所有案例都提供了代码。
? 传送门:https://stripesgenerator.com/
Pure CSS Stripes Generator 主要是帮你生成 条纹背景 的代码。 你可以在网站上根据自己的需求设置条纹的颜色、大小、倾斜角度等属性。 最后会返回一段 css 代码给你。
? 传送门:https://glassgenerator.netlify.app/
Glass Morphism 的功能是设置 毛玻璃背景 样式,你可以在上面手动调节毛玻璃的不透明度、模糊度、背景色等属性。 最后会返回 html 和 css 代码给你。 非常好玩,赶紧去试试吧~
? 传送门:https://uigradients.com/
提供了不同色系搭配的渐变代码。如果你不太擅长配色,可以使用 uiGradients
? 传送门:https://webkul.github.io/coolhue/
Gradient Colors Collection Palette 上有几十个色卡,可以一键复制 css 代码。
? 传送门:https://webgradients.com/
Fresh Background Gradients 提供了即使个配色方案,有双色的,也有多色的。同样提供一键复制 css 代码。
? 传送门:https://coolbackgrounds.io/
可以生成 5种类型 的背景图片,并且提供多套成熟的配色方案供你选择。 但该网站生成的是背景图片,不是代码。
? 传送门:https://svgwave.in/
生成波浪背景图,可以自定义波浪的幅度、颜色等属性。 支持 SVG 和 PNG 下载。
? 传送门:https://www.toptal.com/designers/subtlepatterns/
提供了几十种纹理图。
? 传送门:http://www.stripegenerator.com/
可配置的条纹背景图片。
? 传送门:https://galactic.ink/bg/
在线设置纹理背景和渐变颜色,最后融合在一起生成一张好看的图片。 同时还提供 css 代码给你参考,告诉你如何更好的使用这张图片。
? 传送门:https://patterninja.com/
光看图片介绍就知道这个网站好好玩。 Patterninja 帮你生成可平铺的背景图。
? 传送门:http://thepatternlibrary.com/
提供几十款可平铺的好看背景。 注意:下载按钮在网页的左上角。
.检查元素是否在屏幕可见区域内
我们如何获得元素的点击率?
主要取决于用户点击元素的次数和元素在页面上显示的次数。
我们可以很容易地获取到用户的点击次数,但是如何获取一个元素的显示次数呢?
我们可以通过IntersectionObserver轻松实现,大家可以点击codepen体验一下实际效果。
<div class="tips">box is visible</div>
<div class="box">box</div>
<script>
const $tips=document.querySelector('.tips')
const callback=(entries)=> {
entries.forEach((entry)=> {
console.log(entry.intersectionRatio)
if (entry.intersectionRatio > 0) {
$tips.innerHTML='box is visible'
} else if (entry.intersectionRatio <=0) {
$tips.innerHTML='box is hidden'
}
});
}
const options={
// A list of thresholds, sorted in increasing numeric order, where each threshold is a ratio of intersection area to bounding box area of an observed target. Notifications for a target are generated when any of the thresholds are crossed for that target. If no value was passed to the constructor, 0 is used.
// threshold: 1,
}
const observer=new IntersectionObserver(callback, options)
observer.observe(document.querySelector('.box'))
</script>
2.深拷贝一个对象
我们经常使用 lodash 来深拷贝一个对象。
const obj={
a: {
b: {
name: 'fatfish'
}
}
}
const obj2=lodash.cloneDeep(obj)
obj2.a.b.name='medium'
console.log(obj.a.b.name) // fatfish
console.log(obj2.a.b.name) // medium
但这非常麻烦,因为我们必须下载整个库才能使用 cloneDeep。
幸运的是,在大多数情况下,我们可以使用这两种更简单的方式来深拷贝一个对象。
深度克隆1
const deepClone1=(obj)=> {
return JSON.parse(JSON.stringify(obj))
}
const obj={
a: {
b: {
name: 'fatfish'
}
}
}
const obj2=deepClone1(obj)
obj2.a.b.name='medium'
console.log(obj.a.b.name) // fatfish
console.log(obj2.a.b.name) // medium
是的,我相信你已经看到了,deepClone1 有一些缺陷,它不能复制函数、正则表达式、未定义等值。
const deepClone1=(obj)=> {
return JSON.parse(JSON.stringify(obj))
}
const obj={
a: {
b: {
name: 'fatfish'
}
},
reg: /fatfish/gi,
name: undefined,
showName: (name)=> console.log(name)
}
const obj2=deepClone1(obj)
console.log(obj2)
/*
{
"a": {
"b": {
"name": "fatfish"
}
},
"reg": {}
}
*/
深度克隆2
另一种方法是使用 structuredClone。
这非常方便,我们甚至可以不做任何处理就可以深拷贝一个对象。
它甚至可以复制正则表达式和未定义的。
const obj={
a: {
b: {
name: 'fatfish'
}
},
reg: /fatfish/gi,
name: undefined,
}
const obj2=structuredClone(obj)
obj2.a.b.name='medium'
console.log(obj.a.b.name) // fatfish
console.log(obj2.a.b.name) // medium
console.log(obj2)
/*
{
"a": {
"b": {
"name": "medium"
}
},
"reg": /fatfish/gi,
"name": undefined
}
*/
但是真的没有缺点吗? 它在某些情况下也无法正常工作。
3.获取浏览器名称
在前端监控系统中,需要获取用户出错的浏览器。
这是获取主要浏览器名称的通用函数。
const getBrowserName=()=> {
const userAgent=window.navigator.userAgent
const browsers={
chrome: /chrome/i,
safari: /safari/i,
firefox: /firefox/i,
ie: /internet explorer/i,
edge: /edge/i,
opera: /opera|opr/i,
yandex: /yandex/i,
uc: /ucbrowser/i,
samsung: /samsungbrowser/i,
maxthon: /maxthon/i,
phantomjs: /phantomjs/i,
crios: /crios/i,
firefoxios: /fxios/i,
edgios: /edgios/i,
safariios: /safari/i,
android: /android/i,
ios: /(iphone|ipad|ipod)/i,
unknown: /unknown/i
}
for (const key in browsers) {
if (browsers[key].test(userAgent)) {
return key
}
}
return 'unknown'
}
// Execute the above code in chrome browser
console.log(getBrowserName()) // chrome
// Execute the above code in safari browser
console.log(getBrowserName()) // safari
4.获取随机颜色
我怎样才能得到一个随机的有效颜色?
大家可以点击codepen链接体验实际效果。
const randomColor=()=> {
// Generate three random numbers as the three components of an RGB color value
const r=Math.floor(Math.random() * 256);
const g=Math.floor(Math.random() * 256);
const b=Math.floor(Math.random() * 256);
// Convert RGB color values to hexadecimal format
const hexR=r.toString(16).padStart(2, '0');
const hexG=g.toString(16).padStart(2, '0');
const hexB=b.toString(16).padStart(2, '0');
// Concatenated into a complete color value string
const hexColor=`#${hexR}${hexG}${hexB}`;
return hexColor;
}
演示地址:https://code.juejin.cn/pen/7259289776530915385
5.复制内容到剪贴板
为了给我们的网站用户提供更好的交互体验,我们经常需要提供将内容复制到剪贴板的功能。
难以置信的是,我们竟然只需要6行代码就可以实现这个功能。
const copyToClipboard=(content)=> {
const textarea=document.createElement("textarea")
textarea.value=content
document.body.appendChild(textarea)
textarea.select()
document.execCommand("Copy")
textarea.remove()
}
copyToClipboard('i love medium') // i love medium
演示地址:https://code.juejin.cn/pen/7259288042232840248
6.从搜索中获取查询字符串
使用 URLSearchParams 解析搜索数据变得非常容易。
const getSearchParam=(name)=> {
const searchParams=new URLSearchParams(window.location.search)
return searchParams.get(name)
}
// https://medium.com?name=fatfish&age=1000
console.log(getSearchParam('name')) // fatfish
console.log(getSearchParam('age')) // 1000
const getSearchParams=()=> {
const searchParams=new URLSearchParams(window.location.search)
const params={};
for (const [ key, value ] of searchParams) {
params[key]=value
}
return params
}
// https://medium.com?name=fatfish&age=1000
getSearchParams() // { name: 'fatfish', age: 1000 }
7.将元素滚动到页面顶部
我们可以使用 scrollIntoView 方法将元素滚动到页面顶部。甚至它可以提供非常流畅的用户体验。
const scrollToTop=(ele)=> {
ele.scrollIntoView({ behavior: "smooth", block: "start" })
}
document.querySelector('button').addEventListener('click', function () {
scrollToTop(this)
}, false)
8.将元素滚动到页面底部
将元素滚动到顶部是如此简单。
那我们要如何将元素滚动到页面底部?我想你已经猜到了,设置block结束即可。
const scrollToTop=(ele)=> {
ele.scrollIntoView({ behavior: "smooth", block: "end" })
}
document.querySelector('button').addEventListener('click', function () {
scrollToTop(this)
}, false)
演示地址:https://code.juejin.cn/pen/7259278531174072379
画过渡效果对于程序的重要性是毋容置疑的,过渡动画的流畅真的能给人一种程序很顺畅的感觉。ios系统基本上不管是什么操作都喜欢运用动画过渡,所以给人一种超流畅的感觉!在进行 web 开发中,我们经常需要为网页添加大量的动画来使页面变得更流畅,更炫酷。但是写动画其实是一件很繁琐的事情,所以引入成熟的动画插件就很舒服了。
介绍:在一些网页上,当你滚动页面的时候会看到各式各样的元素动画效果,非常动感。WOW.js 就是一款帮助你实现这种 CSS 动画效果的插件,很容易定制,你可以改变动画设置喜欢的风格、延迟、长度、偏移和迭代等。
官网效果展示:https://www.delac.io/wow/
github: https://github.com/matthieua/WOW
使用方法
之后我们把 animate.css 引入进来就可以使用了。
介绍:animate.css 是一个css3动画库,包含76种动画,并且完全免费开源,可以到github上去下载,使用方法也非常简单,并且因为是css库的原因,完全兼容 H5,小程序以及uni-app。
官网:https://daneden.github.io/animate.css/
github: https://github.com/daneden/animate.css
下载:npm install animate.css --save
引入:import './animate.css'
ps: 如果需要兼容 小程序 uni-app 可以看看这篇:在H5,小程序,uni-app中使用animate.css
在需要用到这个效果的元素上面添加class="wow fadeInUp" 和 data-wow-delay=".1s",具体所表示的含义在下图中有说明
没错!引入之后使用就是这么简单!!
*请认真填写需求信息,我们会在24小时内与您取得联系。