Files
2025-11-05 17:34:23 +08:00

178 lines
4.1 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>lime-svg</title>
<style>
html,
body,
img,
div {
padding: 0;
margin: 0;
width: 100%;
height: 100%;
position: relative;
overflow: hidden;
pointer-events: none;
}
html,
body {
background-color: transparent;
}
#lime-icon {
transition: all 100ms;
}
#lime-icon.is-inherit {
-webkit-mask-image: var(--svg);
mask-image: var(--svg);
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-size: 100% 100%;
mask-size: 100% 100%;
background-color: var(--color, transparent);
/* 设置背景颜色为--color的值默认为透明 */
/* background-blend-mode: multiply; */
}
#lime-icon:not(.is-inherit) {
background: var(--svg) no-repeat;
background-size: 100% 100%;
background-color: transparent;
}
#lime-image {
mix-blend-mode: lighten;
}
</style>
</head>
<body>
<div id="lime-icon">
<img id="lime-image" />
</div>
<script type="text/javascript" src="uni.webview.1.5.5.js"></script>
<script>
const image = document.getElementById('lime-image');
const icon = document.getElementById('lime-icon');
let lastSrc = ''
function setSrc(src) {
if (lastSrc == src) return
lastSrc = src;
const _src = src.split('<svg')
if (_src.length > 1) {
src = (_src[0] == '' ? 'data:image/svg+xml,' : _src[0]) + encodeURIComponent('<svg' + _src[1])
}
// src = src.replace(/#/g, '%23').replace(/"/g, `'`)
image.src = src
// icon.style.setProperty('--svg', `url('${src}')`);
icon.style.setProperty('--svg', `url("${src}")`);
// icon.style.setProperty('--svg', `url(${src})`);
image.onload = (e) => {
emit('load', {
type: "load",
timeStamp: e.timeStamp,
detail: {
width: image.naturalWidth,
height: image.naturalHeight,
}
})
}
image.onerror = (e) => {
emit('error', {
type: "error",
timeStamp: e.timeStamp,
detail: {
width: image.naturalWidth,
height: image.naturalHeight,
}
})
}
}
function setStyle(style) {
if (typeof style === 'object') {
for (let [key, value] of Object.entries(style)) {
if (key == '--color') {
if (value) {
icon.classList.add('is-inherit')
} else {
value = 'black'
}
}
icon.style.setProperty(key, value);
}
}
}
function emit(event, data = {}) {
postMessage({
event,
data
});
};
function postMessage(data) {
uni.webView.postMessage({data})
// if (window.__uniapp_x_) {
// window.__uniapp_x_.postMessage(JSON.stringify(data))
// } else if (uni.webView.postMessage) {
// uni.webView.postMessage({
// data
// })
// }
};
// setStyle({
// color: 'red',
// })
// setSrc('https://api.iconify.design/bi/bell-fill.svg')
// 禁用所有事件
document.addEventListener('mousedown', function(event) {
event.stopImmediatePropagation();
event.preventDefault();
event.stopPropagation();
});
document.addEventListener('mouseup', function(event) {
event.stopImmediatePropagation();
event.preventDefault();
event.stopPropagation();
});
document.addEventListener('click', function(event) {
event.stopImmediatePropagation();
event.preventDefault();
event.stopPropagation();
emit('click')
});
document.addEventListener('keydown', function(event) {
event.stopImmediatePropagation();
event.preventDefault();
event.stopPropagation();
});
document.addEventListener('keyup', function(event) {
event.stopImmediatePropagation();
event.preventDefault();
event.stopPropagation();
});
document.addEventListener('keypress', function(event) {
event.stopImmediatePropagation();
event.preventDefault();
event.stopPropagation();
});
</script>
</body>
</html>