美文网首页
管中窥豹

管中窥豹

作者: pengtoxen | 来源:发表于2019-04-28 16:28 被阅读0次

今天看到个特效,很炫酷,特此记录一下
主要的实现思路:

  • 设置背景的径向渐变(radial-gradient)
  • 每当鼠标拖动或者手势拖动的时候,改变初始div的中心位置
    现在问题来了,radial-gradient是什么东西?

先来看mdn的定义

径向渐变(Radial gradients)由其中心点、边缘形状轮廓及位置、色值结束点(color stops)定义而成。 径向渐变的中心点至边缘形状以及其延伸的部分,由连续缩放的若干同心轮廓组成,这个轮廓由设定的边缘形状决定。色值结束点用于设定虚拟渐变射线(virtual gradient ray)的变化方式,由中心点水平变化至右侧(如图)。色值结束点由百分比设定时,则是相对于终点为渐变射线与边缘形状相交点的渐变半径,渐变半径的终点位置即为100%。每个轮廓均为纯色,颜色由渐变射线上相应横切点所定义的颜色决定。

是不是看起来头大,总结一下就是以某个中心点为基准的一个区域内,从内往外颜色渐变.这个中心点是根据鼠标拖动或者手势拖动动态变更.

这里需要注意color-stop这个属性,这个属性值包含一个颜色值和一个位置值.
颜色值可以是符合规范的css颜色,位置值可以是百分比,也可以是数值,例如20px
位置值的作用就是让颜色过度的时候不会那么突然,有个缓冲的效果.

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="utf-8">
    <meta name="viewport"
        content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <title>spot</title>
    <style>
        body {
            background: url(http://img17.3lian.com/d/file/201702/10/18da8132366a86a162462f10240339c8.jpg) no-repeat center;
            background-size: cover;
            height: 100vh;
            cursor: none;
            margin: 0;
        }

        h1 {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            z-index: 1;
            font-family: "Roboto", Arial, sans-serif;
            font-size: calc(20px + 2vw);
            font-weight: 700;
            color: #fafafa;
            text-shadow: 2px 2px 2px #000;
            pointer-events: none;
            user-select: none;
            white-space: nowrap;
        }

        .spotlight {
            position: absolute;
            height: 100%;
            width: 100%;
            background-image: radial-gradient(circle,
                transparent 160px,
                rgba(0, 0, 0, 0.85) 200px);
        }
    </style>

</head>

<body>
    <h1>左键点击</h1>
    <div class="spotlight"></div>
    <script>
        //DOM load event
        window.addEventListener("DOMContentLoaded", () => {

            const spotlight = document.querySelector('.spotlight');

            let spotlightSize = 'transparent 160px, rgba(0, 0, 0, 0.85) 200px)';

            window.addEventListener('mousemove', e => updateSpotlight(e));

            window.addEventListener('mousedown', e => {

                spotlightSize = 'transparent 130px, rgba(0, 0, 0, 0.95) 150px)';

                updateSpotlight(e);

            });

            window.addEventListener('mouseup', e => {

                spotlightSize = 'transparent 160px, rgba(0, 0, 0, 0.85) 200px)';

                updateSpotlight(e);

            });


            window.addEventListener('touchmove', e => {

                spotlightSize = 'transparent 160px, rgba(0, 0, 0, 0.85) 200px)';

                updateSpotlight(e.touches[0]);

            });

            function updateSpotlight(e) {

                spotlight.style.backgroundImage = `radial-gradient(circle at ${e.pageX / window.innerWidth * 100}% ${e.pageY / window.innerHeight * 100}%, ${spotlightSize}`;

            }
        });
    </script>
</body>

</html>

相关文章

  • 管中窥豹

    以小见大,从一点点小事情当中就可以看出很多道理。一辈子总能遇到这么多这么多的人。一切都是最好的安排,你的到来,你...

  • 管中窥豹

    管中窥豹,虽只见一斑,但若有经验和认知基础,还是可以揣测大局的。 区实验技能大赛。 若参赛学生有三个表现层次:好,...

  • 管中窥豹

    一段小学男生 小男孩电梯里猛亲小女孩! 看完视频, 笑不出来... 心理学家从小男孩眼神里看到了啥? 他对生活积聚...

  • 管中窥豹

    2014年,我接手初二(4)班,任语文老师兼班主任。那天刚拿到重新分班的学生名册,初一跟上来的老班主任就笑着跟我说...

  • 管中窥豹

    近日习读韩怀宗的《世界咖啡学》,原本就对外国名字与地名不敏感的我,深感到里面的称呼错中复杂。好不容易理清思路硬着头...

  • 管中窥豹

    今天看到个特效,很炫酷,特此记录一下主要的实现思路: 设置背景的径向渐变(radial-gradient) 每当鼠...

  • 管中窥豹

    世说新语内关于《管中窥豹》的一段描述大概如下: 东晋著名书法家王羲之的儿子王献之,小的时候很聪明,长大后他也成为了...

  • 管中窥豹

    来说一下所见到表妹和侄子的网课表现。 表妹上高二,姑姑和姑父都是老师,对于孩子的教育很是重视。 ...

  • 豹纹

    只要安于管中窥豹 谁不赞叹美丽花纹

  • 管中窥豹麦当劳

    成功的企业总是让人向往,且心生敬仰。因为企业失败的原因可能就那么几个,但成功肯定有自己的独门秘籍。 所以看到《麦当...

网友评论

      本文标题:管中窥豹

      本文链接:https://www.haomeiwen.com/subject/xlqjnqtx.html