vue+leaflet 使用js自定义封装动画marker样式点

news2025/1/13 15:30:24

效果图

1. 引入leaflet

import L from 'leaflet'

2. 使用原生js实现

import L from 'leaflet';
import '../assets/css/blinkmarker.css';
L.blinkMarker = (point, property) => {
    // 使用js标签,便于操作,这个temDivEle的作用是将divEle通过innerHTML的方式获取为字符串
    var tempDivEle = document.createElement('div');
    var divEle = document.createElement('div');
    var spanEl = document.createElement('span');
    var bEl = document.createElement('b');
    var aEl = document.createElement('a');
    var sEl = document.createElement('span');
    var img = document.createElement('img');
    tempDivEle.append(divEle);
    divEle.append(spanEl);
    divEle.append(sEl);
    divEle.append(bEl);
    spanEl.append(aEl);
    divEle.append(img);
    // img.src = require('../assets/small-ship.png');
    // 设置上基础的样式
    divEle.classList.add('circle-container');
    spanEl.classList.add('pulse-icon');
    aEl.classList.add('dive-icon');
    bEl.classList.add('circle');
    sEl.classList.add('scircle');
    // 操作样式
    var style = document.createElement('style');
    style.type = 'text/css';
    document.head.appendChild(style);
    // 主体颜色
    if (property) {
        if (property.color) {
            spanEl.style.backgroundColor = property.color;
            if (!property.diveColor) {
                aEl.style.boxShadow = '0 0 6px 2px ' + property.color;
            }
        }
        // 标记大小
        if (property.iconSize) {
            spanEl.style.width = property.iconSize[0] + 'px';
            spanEl.style.height = property.iconSize[1] + 'px';
        }
        // 发散的color
        if (property.diveColor) {
            // 发散的重度
            if (property.level) {
                aEl.style.boxShadow = '0 0 ' + (property.level * 3) + 'px ' + property.level + 'px ' + property.diveColor + 'inset';
            } else {
                aEl.style.boxShadow = '0 0 6px 8px ' + property.diveColor + 'inset';
            }
        }
        // 发散的重度
        if (property.level) {
            if (property.diveColor) {
                aEl.style.boxShadow = '0 0 ' + (property.level * 3) + 'px ' + property.level + 'px ' + property.diveColor + 'inset';
            } else if (property.color) {
                aEl.style.boxShadow = '0 0 ' + (property.level * 3) + 'px ' + property.level + 'px ' + property.color + 'inset';
            } else {
                aEl.style.boxShadow = '0 0 ' + (property.level * 3) + 'px ' + property.level + 'px #fff' + 'inset';
            }
        }

        // 闪烁的速度
        if (property.speedTime) {
            aEl.style.setProperty('animation', 'pulsate ' + property.speedTime + 's infinite');
        }
    }
    var myIcon = L.divIcon({ className: 'my-div-icon', html: tempDivEle.innerHTML });
    var marker = L.marker(point, { icon: myIcon, title: property.title });
    return marker;
};

3. 实现 css

.circle-container {
    position: relative;
    z-index: 9999 !important;
}
.circle-container .circle {
    width: 15px;
    height: 15px;
    position: absolute;
    border: 2px solid #fff;
    border-radius: 50%;
    left: -1px;
    top: -1px;
    z-index: 9999 !important;
}
.circle-container .pulse-icon {
    position: absolute;
    top: 0;
    left: 0;
    display: inline-block;
    width: 5px;
    height: 5px;
    border-radius: 100%;
    background-color: #fff inset;
    /* position: relative; */
    box-shadow: 1px 1px 5px 0 rgba(0, 0, 0, 0.1);
    z-index: 9999 !important;
}

.circle-container .scircle {
    display: inline-block;
    width: 3px;
    height: 3px;
    border: 1px solid #000;
    border-radius: 50%;
    position: absolute;
    top: 6px;
    left: 6px;
    z-index: 9999 !important;

}

.circle-container .dive-icon {
    content: "";
    box-shadow: 0 0 6px 8px #fff inset;
    animation: pulsate 1s ease-out;
    animation-iteration-count: infinite;
    animation-delay: 1.5s;
    -webkit-border-radius: 100%;
    border-radius: 100%;
    height: 200%;
    width: 200%;
    animation: pulsate 2s infinite;
    position: absolute;
    margin: -60% 0 0 -60%;
    z-index: 9999 !important;
}

.circle-container .my-div-icon {
    z-index: 9999 !important;
}

@keyframes pulsate {
    0% {
        transform: scale(1, 1);
        opacity: 1;
        -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
        filter: alpha(opacity=0);
    }
    50% {
        opacity: 0.6;
        -ms-filter: none;
        filter: none;
    }
    100% {
        transform: scale(1.5,1.5);
        opacity: 0.2;
        -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
        filter: alpha(opacity=0);
    }
}

4. 在vue中引入js文件,实现效果

this.bindMarker = this.$L.blinkMarker([item.lat, item.lon], {
    iconSize: [15, 15],
    color: 'transparent',
    diveColor: '#fff',
    level: '8',
    speedTime: 1
});
this.bindMarker.addTo(this.map);

大功告成!
备注:可自行编写满足自身需求的css样式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/679330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nacos 打通 CMDB 实现就近访问

博主介绍:✌全网粉丝4W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战、定制、远程,博主也曾写过优秀论文,查重率极低,在这方面…

小程序 体验版 快速配置https服务接口 - 项目是nodeJS配置本地https服务,不用下载源码不用付费,直接使用Git的openssh功能(亲测有效)

背景 学习网易云音乐小程序开发,用了老师的node JS做后端服务器,上线小程序体验版必须要https接口。 接下来就是配置NodeJs服务https踩的坑跟发现的惊喜。 配置https 下载与配置 密钥生成 1 运行命令 : openssl genrsa -out privatekey.p…

BST有缺陷--红黑树(RBT)应运而生

1.首先介绍一下什么是BST(二叉查找树) 若其左子树非空,则左子树上所有节点的值都小于根节点的值若其右子树非空,则右子树上所有节点的值都大于根节点的值其左右子树都是一棵二叉查找树二叉排序树通过中序遍历可以得到递增序列 如下…

技能树-网络爬虫-selenium

文章目录 前言一、selenium二、selenium 测试用例总结 前言 大家好,我是空空star,本篇给大家分享一下《技能树-网络爬虫-selenium》。 一、selenium Selenium是web自动化测试工具集,爬虫可以利用其实现对页面动态资源的采集,对于…

一位老程序员的忠告:别想着靠技术生存一辈子

注:本文系转载。 笔者目前是自己单干,但此前有多年在从事软件开发工作,回头想想自己,特别想对那些初学JAVA/DOT、NET技术的朋友说点心里话,希望我们的体会多少能给你们一些启发。 一、 在一个地方工作8小时就是“穷”…

Python多线程与多进程教程:全面解析、代码案例与优化技巧

文章目录 引言多线程多线程概述案例1:使用多线程实现并发下载文件案例2:使用多线程处理CPU密集型任务 使用threading模块案例1:自定义线程类并启动线程案例2:使用锁保护共享资源 线程同步与互斥案例:使用锁实现线程安全…

css用法总结

1. 块级元素合并时边框重叠问题的解决方案 设置边框2px 红色 如果不做处理,仅仅添加边框则会是这个样子 设置处理后的样式 代码展示 2. 拥有边框的div , hover时的展示效果 代码展示 3. img 和 文字环绕展示 代码展示 设置左浮动即可 4. text-align: center; 可…

Linux——Samba文件共享服务

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。 个人主页:小李会科技的…

Go语言基础-基础语法

前言: \textcolor{Green}{前言:} 前言: 💞这个专栏就专门来记录一下寒假参加的第五期字节跳动训练营 💞从这个专栏里面可以迅速获得Go的知识 本文主要是根据今天所学(链接放在了最后)总结记录的…

please specify ‘programme‘ in launch.json

故障现象: 在windows下点击F5,以运行vscode代码,在屏幕右下角出现这个错误提醒; 故障原因: 在配置文件(settings.json或者launch.json)中,缺少“program”这个参数配置&#xff1b…

SpringBoot 如何使用 Actuator 进行应用程序监控

SpringBoot 如何使用 Actuator 进行应用程序监控 在现代的应用程序开发中,应用程序监控是非常重要的,因为它可以帮助我们快速发现和解决问题。Spring Boot Actuator 是 Spring Boot 提供的一个强大的监控和管理工具,它可以帮助我们监控和管理…

0003Java程序设计-SSM+JSP现代家庭教育网站

摘 要 本毕业设计的内容是设计并且实现一个基于java技术的现代家庭教育网站。它是在Windows下,以MYSQL为数据库开发平台,java技术和Tomcat网络信息服务作为应用服务器。现代家庭教育网站的功能已基本实现,主要包括主页、个人中心、会员管理、…

Maven如何创建Maven web项目

1、创建一个新的模块: 1.1 使用骨架点一下,这里 1.2 找到maven-archetype-webapp项目,选中点击,一路next就行。 1.3 删除不必要的maven配置:(这里我不需要,针对自己情况而定) 可以从name这里开…

figma设计软件专业版教育优惠学生使用edu邮箱免费教程

产品介绍 今天一个买家发了一个链接问是否可以用,本站也是第一次见到,就测试了下可以使用教育优惠后准备分享给大家。本站的大多数教育优惠线报其实都是很多网友买家提供的。 Figma是一款用于数字项目的基于云的设计和原型的设计工具软件。 这样做的目…

Python应用实例(一)外星人入侵(二)

1.添加飞船图像 下面将飞船加入游戏中。为了在屏幕上绘制玩家的飞船,我们将加载一幅图像,再使用Pygame方法blit()绘制它。 为游戏选择素材时,务必要注意许可。最安全、最不费钱的方式是使用Pixabay等网站提供的免费图形,无须授权…

强者游戏-敢来挑战否-Amazon DeepRacer League

Amazon DeepRacer中国峰会总决赛 Amazon DeepRacer 自动驾驶赛车名校邀请赛会在6月27日-28日举办的Amazon DeepRacer中国峰会总决赛时同步启动。勇哥的目标是拿个比较好的名词。大家如果有参加这次活动的可以过来一起搞哦。下面我来具体介绍一下这次峰会,以及比赛的…

PyTorch C++ 前端是 PyTorch 机器学习框架的纯 C++ 接口

使用 PyTorch C 前端 PyTorch C 前端是 PyTorch 机器学习框架的纯 C 接口。 虽然 PyTorch 的主要接口自然是 Python,但此 Python API 位于强大的 C 代码库之上,提供基本的数据结构和功能,例如张量和自动微分。 C 前端公开了纯 C 11 API&…

常见面试题之线程基础知识

1. 线程和进程的区别? 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理IO的。 当一…

DataStructure01|ArrayList和顺序表

ArrayList与顺序表 1.线性表 ​ 线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列… ​ 线性表在逻辑上是线性结构,也就说…

产品设计.从用户体验五要素出发,谈如何设计产品

用户调研--产品定位---产品方案---视觉设计 作者 | 渐渐见减减简https://www.zcool.com.cn/article/ZMTEyNDA2NA.html 用户体验五要素是一种产品分析与设计的方法论,帮助我们以正确方式从0到1设计一款产品。 1 战略层 企业做一个产品前,都要明确几个问题…