首页 > 解决方案 > 为什么每次刷新logo我的页面都会自动上去?

问题描述

我在 Drupal 8 上有一个站点,我使用以下代码更新了一个块视图:

(function ($, Drupal) {

  'use strict';

  setInterval(function() {
    $('.region-navigation-logo .view-display-id-block_3').trigger('RefreshView');
  }, 10000);

})(jQuery, Drupal);

此代码更新站点的徽标。问题是,如果我向下滚动页面,它会每 10 秒自动上升一点。

您可以在我的网站上进行测试:

https://www.s1biose.com/fr/user/login

标识符:演示

密码:演示

然后点击网站的标志,向下滚动主页并等待 10 秒。您将看到页面每 10 秒上升一些像素。

更新

以下代码有效,但它适用于站点的所有视图。

我只想将其应用于 2 个视图:

message_activity_stream_timeline_public

message_activity_stream_timeline_private

这个怎么做 ?

function message_activity_stream_ajax_render_alter(array &$data) {
  $view_name = '<view_name>';
  $view_dom_id = '<view_dom_id>';
  $selector = '.js-view-dom-id-' . $view_dom_id;

  foreach ($data as $key => $value) {
    if ($value['command'] === 'viewsScrollTop' && $value['selector'] === $selector) {
      unset ($data[$key]);
      break;
    }
  }
}

如何将此代码与 2 个视图一起使用?

在此处输入图像描述

标签: javascriptajaxdrupal-8drupal-modules

解决方案


您可以获得以下代码的帮助,以便仅为您的视图运行代码

Drupal.behaviors.blockRefresh = {
    attach: function (context, settings) {
      jQuery.each(Drupal.views.instances, function (i, view) {
        var selector = '.js-view-dom-id-' + view.settings.view_dom_id;
        if (view.settings.view_name == "message_activity_stream_timeline_public" || view.settings.view_name == "message_activity_stream_timeline_private
" ) {
         setInterval(function() {
              $('.region-navigation-logo .view-display-id-block_3').trigger('RefreshView'); }, 10000);
             }
            }
      });
    }
  }

我尚未对其进行测试,但它是一个示例,可帮助您如何仅针对视图名称限制代码。


推荐阅读