clip-path CSS 属性使用裁剪方式创建元素的可显示区域。区域内的部分显示,区域外的隐藏。
效果:

源代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Draggable Line</title>
<link rel="stylesheet" href="styles.css">
<style>
.image-container {
position: relative;
width: 600px;
/* 设置矩形框宽度 */
height: 400px;
/* 设置矩形框高度 */
overflow: hidden;
border: 1px solid #ccc;
}
.image {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.image-1 {
/* 初始化隐藏 */
clip-path: inset(0 100% 0 0);
}
.image-2 {
clip-path: inset(0 0 0 0);
/* 初始化显示全部 */
}
.divider {
position: absolute;
top: 0;
left: 0;
width: 4px;
height: 100%;
background-color: red;
cursor: ew-resize;
z-index: 10;
}
</style>
</head>
<body>
<div class="image-container">
<img class="image image-1"
src="https://tse3-mm.cn.bing.net/th/id/OIP-C.e5hXTV8pz2_dTPBPF-_UswHaI7?rs=1&pid=ImgDetMain"
alt="Image 1" draggable="false"/>
<img class="image image-2"
src="https://puui.qpic.cn/media_img/0/4701401567051512/0"
alt="Image 2" draggable="false"/>
<div class="divider" draggable="true"></div>
</div>
</body>
<script>
const container = document.querySelector('.image-container');
const divider = document.querySelector('.divider');
const image1 = document.querySelector('.image-1');
const image2 = document.querySelector('.image-2');
let isDragging = false;
// 更新分割线和图片的显示
const updateDivider = (x) => {
const rect = container.getBoundingClientRect();
let offsetX = x - rect.left;
// 限制分割线范围
offsetX = Math.max(0, Math.min(offsetX, rect.width));
// 更新分割线位置
divider.style.left = `${offsetX}px`;
// 更新图片的可见区域
const percentage = (offsetX / rect.width) * 100;
image1.style.clipPath = `inset(0 ${100 - percentage}% 0 0)`;
image2.style.clipPath = `inset(0 0 0 ${percentage}%)`;
};
// 鼠标按下时开启拖动
divider.addEventListener('mousedown', () => {
isDragging = true;
});
// 鼠标移动时更新位置
window.addEventListener('mousemove', (e) => {
if (isDragging) {
updateDivider(e.clientX);
}
});
// 鼠标松开时停止拖动
window.addEventListener('mouseup', () => {
isDragging = false;
});
</script>
</html>
610

被折叠的 条评论
为什么被折叠?



