直到上一个特效发布后我才注意到这个功能强大的一个clip-path属性,但是在这里我就不多介绍了,感兴趣可以自行搜索其他博主关于clip-path的文章。
这次更新内容主要在于耳朵效果和全新的波纹效果,这些新的效果全是使用clip-path属性制作的
最新版本资源
https://download.csdn.net/download/src_chao1/87663520
视频
clip
新增的类选择器
pulseClip:所有使用clip-path制作小耳朵的新样式使用的类,不使用其他选择器默认直边心形 clipStar:五角星 clipSixStar:六角星 clipDownArrow:下箭头 clipUpArrow:上箭头 clipHeart:圆滑一点心形 clipHeartBig:特别圆滑的心形 wave:波形,所有默认不移动波形的基础类 waveMove:波形,所有默认移动波形的基础类 wave_1_violent1:波涛汹涌半波长为1的水波,还有半波长为2,3,4,5,7,10的波 wave_1_calm1:平静半波长为1的水波,还有半波长为2,3,4,5,7,10的波 wave_1_big1:很大的波型半波长为1的水波,还有半波长为2,3,4,5,7,10的波
新增的自定义变量
--pulse_cat_weight:耳朵的宽度 --pulse_cat_height:耳朵的高度 --pulse_clip:耳朵的裁剪形状 --wave_clip1:水波的裁剪形状 --wave_light_color:水波颜色 --wave_speed:水波样式
效果
小耳朵
五角星
代码
<button class="button inverted pulseClip clipStar " style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted pulseClip clipStar determine">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted pulseClip clipStar cancel">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted pulseClip clipStar error">
<button-span>BUTTON</button-span>
</button>
效果
简单心形
代码
<button class="button inverted pulseClip " style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted pulseClip determine">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted pulseClip cancel">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted pulseClip error">
<button-span>BUTTON</button-span>
</button>
效果
六角星
代码
<button class="button inverted pulseClip clipSixStar " style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted pulseClip clipSixStar determine">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted pulseClip clipSixStar cancel">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted pulseClip clipSixStar error">
<button-span>BUTTON</button-span>
</button>
效果
下箭头
<button class="button inverted pulseClip clipDownArrow " style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted pulseClip clipDownArrow determine">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted pulseClip clipDownArrow cancel">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted pulseClip clipDownArrow error">
<button-span>BUTTON</button-span>
</button>
效果
上箭头
代码
<button class="button inverted pulseClip clipUpArrow " style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted pulseClip clipUpArrow determine">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted pulseClip clipUpArrow cancel">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted pulseClip clipUpArrow error">
<button-span>BUTTON</button-span>
</button>
效果
心形
代码
<button class="button inverted pulseClip clipHeart " style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted pulseClip clipHeart determine">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted pulseClip clipHeart cancel">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted pulseClip clipHeart error">
<button-span>BUTTON</button-span>
</button>
效果
波形
js生成
关于波形,我在wave.css中放了几个波形的剪切坐标,由于波形也是使用了剪贴坐标,所以坐标点实在太多,文件很大,因此把我制作剪切坐标的js代码介绍一下,不想要使用js生成剪切坐标的同学可以跳过这一段了~
function create(st = 'violentRand', style = 'water' || 'cloud', start = 65, end = 25, fre = 2) {
let init = start;
const canvas = document.createElement('canvas');
canvas.width = 500;
canvas.height = 100;
document.body.appendChild(canvas)
let context = canvas.getContext('2d');
let fun = BezierCurve(2, 100, 0, 0);
context.beginPath();
for (let i = 0; i < 20; i++) {
context.moveTo(i * 25, 0)
context.lineTo(i * 25, 100);
}
context.stroke();
context.beginPath();
for (let i = 0; i < 10; i++) {
context.moveTo(0, i * 10)
context.lineTo(500, i * 10);
}
context.stroke();
context.beginPath();
let rand = {
'water': {
'violentRand': [[45, 55], [70, 90], [45, 55], [10, 30]],
'calmRand': [[45, 55], [60, 70], [45, 55], [30, 40]],
'bigRand': [[45, 55], [80, 100], [45, 55], [0, 20]]
},
'cloud': {
'violentRand': [[70, 90], [10, 30], [70, 90], [10, 30]],
'calmRand': [[60, 70], [30, 40], [60, 70], [30, 40]],
'bigRand': [[80, 100], [0, 20], [80, 100], [0, 20]]
}
}
let str = "";
let len = 100 / fre % 4 === 0 ? 100 / fre : Math.floor(100 / fre / 4) * 4;
let compensate = 100 / len;
for (let i = 0; i < len; i++) {
fun = BezierCurve(2, start, style === 'water' ? i % 4 <= 1 ? Math.min(start * 2, end * 2) : Math.max(start * 2, end * 2) : Math.min(start * 2, end * 2), end);
start = end;
end = random(rand[style][st][i % 4][0], rand[style][st][i % 4][1], true);
if (i === len - 2) end = init;
for (let j = 0; j <= 100; j++) {
str += `${j / len + i * compensate}% ${fun(j / 100)}% ,`;
context.lineTo(j / (len / 5) + i * compensate * 5, fun(j / 100));
}
}
context.stroke();
console.log('--wave_clip1: polygon(' + str + '100% 0%,100% 100%,0 100%)');
}
create('violentRand','cloud');
首先要说的是,如果直接运行这段代码(包括文件中那个html代码)都是会失败的,因为这里面有我两个自定义函数没有发布出来,分别是BezierCurve和random,用于生成平滑曲线坐标和随机数
BezierCurve:
const BezierCurve = function () {
return (type = 2, ...args) => {
if (args.length >= type + 1)
return (t) => {
let res = 0;
for (let i = 0; i <= type; i++) {
res += Math.pow(t, i) * Math.pow((1 - t), type - i) * args[i];
}
return res;
}
else return console.warn(`Insufficient parameters There should be ${type + 1} parameters`);
}
}()
random:
const random = function (start = 0, end = 1, integer = false) {
let number = Math.random() * (start - end) + end;
if (integer) return Math.floor(number);
return number;
}
这三段代码中,BezierCurve和random我就不介绍了,感兴趣可以了解贝塞尔曲线
重点在于如何使用create函数
参数:
st:["violentRand"|"calmRand"|"bigRand"],用于生成不同高度差的波纹,calm最稳定,big最剧烈,violent介于两者之间 style:["water"|"cloud"],用于生成不同样式波纹,水波纹和云波纹 start:第一段曲线开始点高度位置 end:第一段曲线结束点坐标高度位置 fre:波长,数值越小波的个数越多
返回值:该函数无返回值,但是会在控制台中输出适配本css样式的字符串,之间复制粘贴到本地css类选择中就可以了,同时也会在您的页面中生成一个canvas标签,用于展示生成的波形
当然您也可也选择在代码中最后直接为一个元素的style赋值,这样就不需要繁杂的复制粘贴了
不过这个函数生成的曲线只会保证每段曲线是连续的,无法保证曲线和曲线直接是连续的,为了避免这个问题,您可以更改高度差设置或者多次生成波形,总会有连续的时候不是嘛~~
css样式效果
默认不移动波形
代码
<button class="button inverted wave " style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted wave wave_1_violent1" style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted wave wave_1_violent5" style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted wave wave_1_calm1" style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted wave wave_1_calm5" style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted wave wave_1_big1" style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted wave wave_1_big5" style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted wave wave_1_violent5 determine">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted wave wave_1_violent5 cancel">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted wave wave_1_violent5 error">
<button-span>BUTTON</button-span>
</button>
效果
默认移动的波形
代码:
<button class="button inverted waveMove " style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted waveMove wave_1_violent1" style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted waveMove wave_1_violent5" style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted waveMove wave_1_calm1" style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted waveMove wave_1_calm5" style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted waveMove wave_1_big1" style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted waveMove wave_1_big5" style="--width: 550px;">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted waveMove wave_1_violent5 determine">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted waveMove wave_1_violent5 cancel">
<button-span>BUTTON</button-span>
</button>
<button class="button inverted waveMove wave_1_violent5 error">
<button-span>BUTTON</button-span>
</button>
效果(其实图片看不出什么区别~~)
好了,那么这次更新的耳朵和波形也全都结束了,如果我有更多的灵感会继续发布更多内容