Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

155
Visualizações
Zoom and autocenter on overlapping div element when using wavesurfer's zoom method

This might be a specific question but here we go. I am trying to implement a waveform using wavesurferjs and rendering a div element over it. I want to use the wavesurfer zoom function to zoom in the waveform when on mobile. The problem here is, How can I make the div element rendered over the wavform zoomed in, responsive and scrollable in the same way as the waveform.

What I have tried:

I have managed to do a workaround solution where I would manually set the div width of the waveform instead of using zoom() but it's not as clean as using the built in functionality.

My code

The wavesurfer configuration

 const formWaveSurferConfig = (ref) => ({
  container: ref,
  waveColor: "rgb(180,180,180)",
  barWidth: 3,
  barRadius: 3,
  // scrollParent: false,
  responsive:true,
  interact:false,
  fillParent: true,
  // autocenter: false,
  height: 130,
  cursorWidth: 0,
  normalize: true,
  partialRender: true,
  plugins: [
    Cursor.create({
      showTime: true,
      opacity: 1,
      width: "1px",
      customShowTimeStyle: {
        "background-color": "#000",
        color: "#fff",
        padding: "2px",
        "font-size": "10px",
      }
    })
  ],
});

I create the waveform and here are my elements:

<div style={{
    position: "relative",
    width: "90%",
    height: 160,
    margin: "auto",
    overflowX: "auto",
    paddingBottom: 10,}}>
        <div 
          style={{
    height:90, 
    zIndex: 5,
    pointerEvents: "none",
    position: "absolute",
    top: 0,
    width: areaRef.current?.offsetWidth}}
        >
          <Chart data={chartData}/>
        </div>
        <div
          onClick={handleMouseClick}
          style={{ 
          position: "absolute",
          bottom: 0,
          overflow: "auto hidden",
          width: "100%" }}
          id="waveform"
          ref={areaRef}>
        </div>
</div>
<Button 
    color="primary"  
    onClick={() => {
      setIsZoomed(!isZoomed);
      wavesurfer.current?.zoom(isZoomed? 1 : 40);
    }}>
    {!isZoomed ? "+" : "-"}
  </Button>

Notes about the problem

As stated above, I have done the workaround where I would not use the zoom function and instead just set the widths of my elements to 300% for example. I have tried to modify the css but without luck. Let's not forget that the zoom function also autocenters the waveform on the progress when the track is playing. That means that the div element also has to follow that centering. I am currently trying to check if the OnScroll event can be used to do that.

about 4 years ago · Santiago Trujillo
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda