|
|
- <!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>
|