【问题标题】:How to avoid multiple regions being created in wavesurferjs如何避免在wavesurferjs中创建多个区域
【发布时间】:2020-03-14 02:05:57
【问题描述】:

我正在使用带有区域插件的wavesurferjs https://wavesurfer-js.org/

我的问题是:

  1. 我想避免创建多个区域,只允许创建 1 个区域。
  2. 移动我想避免的区域(未询问,修复不是那么重要,可以忽略)

创建的多个区域如下所示:

下面是我的代码:

var wavesurfer = WaveSurfer.create({
  container: '#waveform',
  waveColor: 'violet',
  progressColor: '#264E73',
  hideScrollbar: true,
  cursor: false
});
wavesurfer.load('https://ia902606.us.archive.org/35/items/shortpoetry_047_librivox/song_cjrg_teasdale_64kb.mp3');


wavesurfer.enableDragSelection({
  drag: false,
  slop: 1,
  loop : false,
});

wavesurfer.on('region-created', function (region) {
  console.log(region.start, region.end);
});


wavesurfer.on('ready', function (readyObj) {
    wavesurfer.addRegion({
        start: 0, // time in seconds
        end: wavesurfer.getDuration(), // time in seconds
        color: 'hsla(100, 100%, 30%, 0.1)',
        loop: false,
        multiple: false,
        // drag: false
    });
});
       handle.wavesurfer-handle{
            width: 9% !important;
            max-width: 7px !important;
            background: orange;
            cursor: default !important;
       }
<script src="https://cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.2.3/wavesurfer.min.js"></script>

<!-- wavesurfer.js timeline -->
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.2.3/plugin/wavesurfer.timeline.min.js"></script> -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.1.5/plugin/wavesurfer.regions.min.js"></script>




      <div id="waveform"></div>

请帮助我提前谢谢!

【问题讨论】:

    标签: javascript jquery audio video wavesurfer.js


    【解决方案1】:

    您可以在“region-updated”event 上收听区域变化。当区域更新时,您可以通过在该特定区域上调用 remove() 方法来删​​除先前的区域,如下例所示。

    var wavesurfer = WaveSurfer.create({
      container: '#waveform',
      waveColor: 'violet',
      progressColor: '#264E73',
      hideScrollbar: true,
      cursor: false
    });
    wavesurfer.load('https://ia902606.us.archive.org/35/items/shortpoetry_047_librivox/song_cjrg_teasdale_64kb.mp3');
    
    
    wavesurfer.enableDragSelection({
      drag: false,
      slop: 1,
      loop : false,
    });
    
    wavesurfer.on('region-created', function (region) {
      console.log(region.start, region.end);
    });
    
    wavesurfer.on('region-updated', function(region){
          var regions = region.wavesurfer.regions.list;
          var keys = Object.keys(regions);
          if(keys.length > 1){
            regions[keys[0]].remove();
          }
    });
    
    wavesurfer.on('ready', function (readyObj) {
        wavesurfer.addRegion({
            start: 0, // time in seconds
            end: wavesurfer.getDuration(), // time in seconds
            color: 'hsla(100, 100%, 30%, 0.1)',
            loop: false,
            multiple: false,
            // drag: false
        });
    });
    handle.wavesurfer-handle{
                width: 9% !important;
                max-width: 7px !important;
                background: orange;
                cursor: default !important;
           }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.2.3/wavesurfer.min.js"></script>
    
    <!-- wavesurfer.js timeline -->
    <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.2.3/plugin/wavesurfer.timeline.min.js"></script> -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.1.5/plugin/wavesurfer.regions.min.js"></script>
    
    
    
    
          <div id="waveform"></div>

    【讨论】:

    • 但是在onGrag 上的代码中没有显示,请在没有mouseevent 的情况下使用带有onGrag 的不同sn-p。那我就接受你的回答
    • @EaBengaluru 我去扔插件文档并更新代码。插件没有 onDrag 方法,但是它有 'region-updated' 事件。您可以从中收听拖动事件并进行必要的更改。希望对您有所帮助。
    • 啊,这个解决方案比我的要好,因为它不会删除选择,除非创建一个新的。不错。
    【解决方案2】:

    要在每次创建新区域时清除之前的区域,请在 &lt;wave&gt; 节点上侦听 mousedown 事件并在 wavesurfer 对象上调用 clearRegions()

    例子:

    var wavesurfer = WaveSurfer.create({
      container: '#waveform',
      waveColor: 'violet',
      progressColor: '#264E73',
      hideScrollbar: true,
      cursor: false,
    });
    wavesurfer.load('https://ia902606.us.archive.org/35/items/shortpoetry_047_librivox/song_cjrg_teasdale_64kb.mp3');
    
    wavesurfer.enableDragSelection({
      drag: false,
      slop: 1,
      loop: false,
    });
    
    wavesurfer.on('region-created', function(region) {
      //console.log(region.start, region.end);
    });
    
    wavesurfer.on('ready', function(readyObj) {
      wavesurfer.addRegion({
        start: 0, // time in seconds
        end: wavesurfer.getDuration(), // time in seconds
        color: 'hsla(100, 100%, 30%, 0.1)',
        loop: false,
        multiple: false,
        //drag: false
      });
    });
    
    document.querySelectorAll('wave').forEach(wave => {
        wave.addEventListener('mousedown', function(e) {
          e.preventDefault();
          wavesurfer.clearRegions();
        });
    });
    handle.wavesurfer-handle {
      width: 9% !important;
      max-width: 7px !important;
      background: orange;
      cursor: default !important;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.2.3/wavesurfer.min.js"></script>
    
    <!-- wavesurfer.js timeline -->
    <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.2.3/plugin/wavesurfer.timeline.min.js"></script> -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.1.5/plugin/wavesurfer.regions.min.js"></script>
    
    
    
    
    <div id="waveform"></div>

    【讨论】:

    • 不是一个很好的解决方案,如果您进入整页,然后单击页面上的任意位置。 selected region 被取消选中
    • @EaBengaluru 好电话!我没有正确选择要应用eventListener 的元素。我已对其进行了更新,因此点击现在仅适用于 &lt;wave&gt; 元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    相关资源
    最近更新 更多