i have coded for me a little OL script to display GPX Routes in a OSM map. That works so far, even with a little gimmick.
What I miss is a continuous distance. So from trkpt 0 to trkpt 1 + (trkpt 1 to trkpt 2) + (trkpt 2 to trkpt 3) ...
For the gimmick I use the array keys. Each array key is an (internal) point where data is calculated.
In Openlayers is an array with all coordinates + the elevation. I would like to extend this array by the distance. Whether the array values should be the continuous distance or that from last-trkpt to next-trkpt, I would have to think twice. Maybe a value with last-trkpt to next-trkpt is probably better.

Please test by yourself possible "duplicates" before you vote my question as such.

HTML:

    <input type="file" id="files" name="files[]" >
    <div id="map" class="map"></div>

Javascript:

    var gpxFormat = new ol.format.GPX();
    var gpxFeatures;
    var coordsarray = [];
    var GPXgeometry = [];
    function handleFileSelect(evt) {
    
    gpxLayer.getSource().clear();
    
    var files = evt.target.files;
    
    var output = [];
    for (var i = 0, f; f = files[i]; i++) {
    var reader = new FileReader();
    reader.readAsText(files[i], "UTF-8");
    reader.onload = function (evt) {
    gpxFeatures = gpxFormat.readFeatures(evt.target.result,{
    dataProjection:'EPSG:4326',
    featureProjection:'EPSG:3857'
    });
    gpxLayer.getSource().addFeatures(gpxFeatures);
    
    var features = gpxLayer.getSource().getFeatures();
    features.forEach(function(feature) {
    GPXgeometry = feature.getGeometry();
    coordsarray = feature.getGeometry().getCoordinates();
    });
    
    //--- ??? Start
    
    var i = 0;
    var distance = 0;
    coordsarray[0][i].push(distance):
    
    // for ???
    
    var lat0 = coordsarray[0][i][0];
    var lon0 = coordsarray[0][i][1];
    var latlon0 = [lat0, lon0];
    i++;
    var lat1 = coordsarray[0][i][0];
    var lon1 = coordsarray[0][i][1];
    var latlon1 = [lat1, lon1];
    
    // calculate distance
    // ???
    
    coordsarray[0][i].push(distance):
    i--;
    
    //--- ??? End
    
    }
    
    
    var gpxLayer = new ol.layer.Vector({
    source: new ol.source.Vector({
    
    })
    });
    
    
    var map = new ol.Map({
    target: 'map',
    layers: [
    new ol.layer.Tile({
    source: new ol.source.OSM()
    }),
    gpxLayer
    ]
    });
    
    document.getElementById('files').addEventListener('change', handleFileSelect, false);