Openlayers3点的动画效果

一、效果预览

星星坠落效果

二、全部代码如下

<!DOCTYPE html>
<html>
<head>
<title></title>
<link href="ol.css" />
<script src="ol-debug.js"></script>
<style>
    * {
        padding: 0px;
        margin: 0px;
    }

    html,
    body,
    #map {
        width: 100%;
        height: 100%;
    }
</style>
</head>
<body>
<div id="map">
    <button id="add">添加点</button>
</div>
<script>
    var layer = new ol.layer.Tile({
        source: new ol.source.XYZ({
            url: 'http://www.google.cn/maps/vt?pb=!1m5!1m4!1i{z}!2i{x}!3i{y}!4i256!2m3!1e0!2sm!3i342009817!3m9!2szh-CN!3sCN!5e18!12m1!1e47!12m3!1e37!2m1!1ssmartmaps!4e0&token=32965'
        })
    });
    var vector = new ol.layer.Vector({
        source: new ol.source.Vector()
    });

    var view = new ol.View({
        center: new ol.proj.fromLonLat([120, 30]),
        zoom: 7
    });
    var map = new ol.Map({
        layers: [layer, vector],
        view: view,
        target: "map",
        logo: false
    });

    var feature = new ol.Feature({
        geometry: new ol.geom.Point(new ol.proj.fromLonLat([120, 30]))
    });
    var feature2 = new ol.Feature({
        geometry: new ol.geom.Point(new ol.proj.fromLonLat([121, 30]))
    });
  //创建点的星星样式
    var style = new ol.style.Style({
        image: new ol.style.RegularShape({
            points: 5,
            radius1: 20,
            radius2: 10,
            fill: new ol.style.Fill({
                color: "#ffff00"
            }),
            stroke: new ol.style.Stroke({
                width: 1,
                color: "00ffff"
            })
        })
    });
    vector.setStyle(style);
    //添加点
    function addFeature(coordinates) {
        var f = new ol.Feature({
            geometry: new ol.geom.Point(coordinates)
        });
        var geom = f.getGeometry();
        var xy = geom.getCoordinates();
        var extent = view.calculateExtent(map.getSize());
        var dy = extent[3] - xy[1];
        var c = 0.01;
        var key = map.on("postcompose", function (e) {
            if (c >= 1) {
                map.unByKey(key);
            }
            c += 0.01;
            geom.setCoordinates([xy[0], xy[1] + dy * (1 - ol.easing.inAndOut(c))]);
        });
        geom.setCoordinates([xy[0], xy[1] + dy * (1 - ol.easing.inAndOut(c))]);
        vector.getSource().addFeature(f);
    }

    var btn = document.getElementById("add");
    btn.addEventListener("click", function () {
        var extent = view.calculateExtent(map.getSize());
        for (let i = 0; i < 1; i++) {
            var dx = extent[2] - extent[0], dy = extent[3] - extent[1];
            setTimeout(addFeature, 200 * (i + 1), [extent[0] + dx * Math.random(1), extent[1] + dy * Math.random(1)]);
        }
    });
</script>
</body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,539评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,294评论 4 61
  • 赤霞珠(Cabernet Sauvignon)适应能力极强,在全世界产酒国都有种植,其单宁和酚类物质含量丰富,被称...
    红酒百科全书阅读 2,095评论 0 5
  • 家 by:虎牙骑士 家永远是你的避风港。 现在这个年龄的孩子最经常想的事情大概就是逃离家长,逃离这个生活了十几年的...
    虎牙骑士阅读 197评论 0 0
  • 今天吃完午饭去学校外面买点东西,刚出校门走了没几步就看到有几个拿着广告板抱着募捐箱的年轻人。 我以为是大学生的众筹...
    洛小娅阅读 552评论 4 4