Windows 动态壁纸 html动态壁纸

345 阅读2分钟

介绍一款开源动态壁纸软件Lively Wallpaper

这款壁纸软件也上架了微软商店Lively Wallpaper - Microsoft Apps,还获得了2023年微软商店个性化分类精选app奖项。 image.png Announcing the Microsoft Store App Awards 2023 Winners! - Windows Developer Blog

lively wallpaper 支持添加html文件作为动态壁纸,所以基于html、css、js可以实现很炫酷的动态桌面。

image.png

那么哪里去找炫酷的html呢?

codepen.io 网站上面有很多大佬用纯html、css、js实现的炫酷效果,可以把这些效果搭配lively wallpaper用作动态桌面。

例如codepen上面有一个“动态随机emoji跳动”效果的html、css、js实现A Pen by Chokcoco (codepen.io)

image.png

可以将效果写成一个html文件导入lively wallpaper。当然也可以自己在大佬的基础上进行定制化改造。例如为了给工作中劳累无聊的我增加一点动力,我魔改了一款“工作激励”动态壁纸。html代码贴在下方:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
    body, html {
        width: 100%;
        height: 100%;
        margin: 0;
        overflow: hidden; /* 防止页面滚动 */
        background-color: #000000;
        display: flex;
        justify-content: center;
        align-items: center;
    }

    .element-container {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        pointer-events: none;
    }

    .element {
        position: absolute;
        font-size: 150px;
        perspective: 2000px;
        transform-style: preserve-3d;
        animation: rotate 2s alternate infinite ease-in-out,
            fall 6s alternate infinite cubic-bezier(.22,.16,.04,.99) forwards;
    }

    .emoji::before,
    .emoji::after,
    .text::before,
    .text::after {
        content: var(--content, "\1F595");
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
    }

    .emoji::after,
    .text::after {
        transform: translate(-50%, -50%) translateZ(-4px);
    }

    .text-container {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        display: flex;
        justify-content: center;
        align-items: center;
    }

    .text {
        font-size: 24px;
        color: white;
        animation: jump 1s infinite alternate;
    }

    @keyframes rotate {
        0% {
            transform: rotateY(-35deg);
        }
        100% {
            transform: rotateY(35deg);
        }
    }

    @keyframes fall {
        0% {
            transform: scale(1.25, 0.75) translateY(150px);
        }
        25% {
            transform: scale(1, 1) translateY(0);
        }
        100% {
            transform: scale(1, 1) translateY(0);
        }
    }

    @keyframes jump {
        0% {
            transform: translateY(0);
        }
        100% {
            transform: translateY(-10px);
        }
    }
</style>
</head>
<body>
    <div class="element-container" id="elements">
    </div>
    <script>
        function generateRandomPosition() {
            const randomTop = Math.random() * 100;
            const randomLeft = Math.random() * 100;
            return {top: randomTop, left: randomLeft};
        }

        function generateRandomEmoji() {
            return String.fromCodePoint(0x1F595);
        }

        function createEmoji() {
            const emoji = document.createElement('div');
            emoji.classList.add('element', 'emoji');
            const position = generateRandomPosition();
            emoji.style.top = `${position.top}%`;
            emoji.style.left = `${position.left}%`;
            emoji.style.setProperty('--content', `"${generateRandomEmoji()}"`);
            return emoji;
        }

        function createText() {
            const text = document.createElement('div');
            text.classList.add('element', 'text');
            const position = generateRandomPosition();
            text.style.top = `${position.top}%`;
            text.style.left = `${position.left}%`;
            text.innerText = "这破班不上也罢";
            return text;
        }

        function animateElements() {
            const elementsContainer = document.getElementById('elements');

            function removeChildren(container) {
                while (container.firstChild) {
                    container.removeChild(container.firstChild);
                }
            }

            function addRandomElements() {
                const numElements = Math.floor(Math.random() * 3) + 1; // 添加 1 到 3 个元素
                for (let i = 0; i < numElements; i++) {
                    const element = Math.random() < 0.5 ? createEmoji() : createText(); // 随机创建 Emoji 或者 文本
                    elementsContainer.appendChild(element);
                }
            }

            function animate(t) {
                if (t - time < step) {
                    requestAnimationFrame(animate);
                    return
                }
                time = t
                removeChildren(elementsContainer);
                addRandomElements();
                requestAnimationFrame(animate);
            }
            
            let time = 0
            let step = 500
            animate(time);
        }

        animateElements();
    </script>
</body>
</html>

这份html会每隔0.5s在屏幕的随机位置刷新几个“友好”的手势和“包含正能量”的话语,让工作中的我充满干劲。

image.png

image.png

image.png