Change building color based on zoom level

Uses the interpolate expression to ease-in the building layer and smoothly fade from one color to the next.

<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8' />
    <title>Change building color based on zoom level</title>
    <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
    <script src='https://api.tiles.mapbox.com/mapbox-gl-js/v0.51.0/mapbox-gl.js'></script>
    <link href='https://api.tiles.mapbox.com/mapbox-gl-js/v0.51.0/mapbox-gl.css' rel='stylesheet' />
    <style>
        body { margin:0; padding:0; }
        #map { position:absolute; top:0; bottom:0; width:100%; }
    </style>
</head>
<body>

<style>
    #zoom  {
        display: block;
        position: relative;
        margin: 20px auto;
        width: 50%;
        height: 40px;
        padding: 10px;
        border: none;
        border-radius: 3px;
        font-size: 12px;
        text-align: center;
        color: #fff;
        background: #ee8a65;
    }
</style>
<div id='map'></div>
<button id='zoom'>Zoom to buildings</button>
<script>
mapboxgl.accessToken = '<your access token here>';
var map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/mapbox/streets-v10',
    center: [-90.73414, 14.55524],
    zoom: 13
});

map.on('load', function() {
    map.setPaintProperty('building', 'fill-color', [
        "interpolate",
        ["exponential", 0.5],
        ["zoom"],
        15,
        "#e2714b",
        22,
        "#eee695"
    ]);

    map.setPaintProperty('building', 'fill-opacity', [
        "interpolate",
        ["exponential", 0.5],
        ["zoom"],
        15,
        0,
        22,
        1
    ]);
});

document.getElementById('zoom').addEventListener('click', function () {
    map.zoomTo(19, {duration: 9000});
});
</script>

</body>
</html>
Copy example