ListView显示的模板上的JQuery,如何分别触发每个对象的播放?

Posted

技术标签:

【中文标题】ListView显示的模板上的JQuery,如何分别触发每个对象的播放?【英文标题】:JQuery on template which is displayed by ListView, How to Trigger play on each object separately? 【发布时间】:2015-02-05 09:47:51 【问题描述】:

我的模板

% for maingallery in gallery %

    <div id="frame">
    <h1 id="mainimagetitle"> maingallery.title </h1>
       <a href="% url 'gallery_detail' maingallery.id %"><img id="mainimage" src=" maingallery.main_image1.url "/></a>
    <p id="mainimagetext"> maingallery.text </p>




<audio id="jazzy">
  <source src=" maingallery.audio_file.url " type="audio/ogg" />
</audio>
        <script>
            $(document).ready(function() 

            $("#mainimage").mouseover(function()
            $(this).addClass('active').removeClass('notactive');
            if($(this).hasClass('active')) 
              $("#jazzy").addClass('active').removeClass('notactive');
            
            if ($("#jazzy").hasClass('active')) 
              $("#jazzy").trigger("play");
            

            );
            $("#mainimage").mouseleave(function()
            $(this).removeClass('active').addClass('notactive');
            if($(this).hasClass('notactive')) 
              $("#jazzy").addClass('notactive').removeClass('active');
            
            if ($("#jazzy").hasClass('notactive')) 
              $("#jazzy").trigger("pause");
            

            );
             );

        </script>
        </div>
% endfor %

   % block content %

   % endblock %

我的问题:

我在模板上列出了几个对象,每个对象都有不同的声音文件,现在我想实现:当 mouseon 对象 1 时,触发该对象的声音等...

到目前为止,我已经实现了当 mouseon 对象 1 时触发声音,但它不适用于其余对象。

【问题讨论】:

【参考方案1】:

您的 html 代码将包含多个带有“mainimagetitle”id 的元素。您必须添加循环索引或对象 ID。

你可以在你的JS代码中使用class属性。

% for maingallery in gallery %
    <div id="frame- maingallery.id ">
    <h1 id="mainimagetitle- maingallery.id " class="mainimagetitleclass">...</h1>
    <div id="frame- forloop.counter ">
    <h1 id="mainimagetitle- forloop.counter " class="mainimagetitleclass">...</h1>
    ...
% endfor %

<script>
    $(document).ready(function() 
        $(".mainimagetitleclass").mouseover(function()...);
        ...
    );
</script>

【讨论】:

【参考方案2】:

感谢 Mikhail V 的帮助。您的回答非常有帮助 ;) 虽然我不确定我是否完全按照您展示的那样做

% for maingallery in gallery %


    <div id="frame">
    <h1 id="mainimagetitle"> maingallery.title </h1>
       <a href="% url 'gallery_detail' maingallery.id %"><img class="mainimageclass" id="mainimage- forloop.counter " src=" maingallery.main_image1.url "/></a>
    <p id="mainimagetext"> maingallery.text </p>




<audio class="mainimageaudio" id="jazzy- forloop.counter ">
  <source src=" maingallery.audio_file.url " type="audio/ogg" />
</audio>


        </div>
          <script>
       $(document).ready(function()
       $("#mainimage- forloop.counter ").mouseenter(function()
       $("#jazzy- forloop.counter ").trigger('play');
       );
       $("#mainimage- forloop.counter ").mouseleave(function()
       $("#jazzy- forloop.counter ").trigger('pause').prop("currentTime",0);
       );
       );


        </script>



% endfor %

我使用了 forloop 计数器,因为带有 id 的字符串在我的情况下不起作用,实际上我很惊讶,因为我认为在 jquery 字符串中无法使用 django 模板,一切正常,所以我不会像我做的那样错.

最后一个问题,我使用 ogg 格式的音频文件,但是当我触发按事件播放时,它不会运行得那么快,我有一些短暂的延迟,大约 0.5 秒 -1 秒,但我认为这可能是音频的故障格式,也许一些建议哪种格式最适合音频文件,我听说为一个文件添加几种格式很好。

【讨论】:

以上是关于ListView显示的模板上的JQuery,如何分别触发每个对象的播放?的主要内容,如果未能解决你的问题,请参考以下文章

如何在listview中使用jquery动态显示列表分隔符?

JQuery - 动态添加Html后,如何使CSS生效,JS代码可用?

如何在 Xamarin UWP 上的 ListView 中释放内存?

tp5+jquery通过模板页面替换的方式实现分页

是否可以使用基于类的通用 ListView 在单个模板中同时过滤和排序?如果是,如何?

jQuery mobile +主干:无法在初始化之前调用listview上的方法