javascript - 为什么每次刷新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 个视图一起使用?
解决方案
您可以获得以下代码的帮助,以便仅为您的视图运行代码
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);
}
}
});
}
}
我尚未对其进行测试,但它是一个示例,可帮助您如何仅针对视图名称限制代码。