Jquery 在悬停时加载 MVC 视图会导致闪烁问题

Posted

技术标签:

【中文标题】Jquery 在悬停时加载 MVC 视图会导致闪烁问题【英文标题】:Jquery loading MVC Views on hover causes flickering issues 【发布时间】:2021-10-15 22:30:01 【问题描述】:

我希望每个 div 在悬停时展开并更改其内容,并在鼠标移出时返回之前的状态。我这样做的方式是使用 MVC 部分视图:

(子页面.cshtml

<div id="subpages" class="mx-auto d-flex justify-content-evenly">
    <div class="subpage" id="subpage1">
        @Html.Partial("Subpage1Narrow")
    </div>
    <div class="subpage" id="subpage2">
        @Html.Partial("Subpage2Narrow")
    </div>
    <div class="subpage" id="subpage3">
        @Html.Partial("Subpage3Narrow")
    </div>
</div>

(Subpage1Narrow.cshtml)

<div class="d-flex align-items-start flex-column" style="width: 456px;">
    <p class="subpage__title mb-4 mx-4"><b>Subpage<br>1</b></p>
    <br>
    <p class="mx-4">...</p>
    <button type="button" class="btn btn-danger mt-auto mb-5 mx-4" id="subpage1__button" style="font-family: var(--alt-font)"><b>Learn more <span class="bi bi-arrow-right"></span></b></button>
</div>

(Subpage1Wide.cshtml)

<div class="d-flex flex-column align-items-center mx-auto" style="width: 1368px; height: 681px;">
    <p class="text-center subpage__title mb-4 mx-4 mt-auto"><b>Subpage 1</b></p>
    <br>
    <b class="text-center mb-5 subpage__text--extended">...</b>
    <div class="row w-50 text-center mb-3">
        <div class="col">
            <img src="~/img/ICON1.svg"  >
        </div>
        <div class="col">
            <img src="~/img/ICON2.svg"  >
        </div>
        <div class="col">
            <img src="~/img/ICON3.svg"  >
        </div>
    </div>
    <div class="row w-50 text-center mb-5">
        <div class="col">
            <b class="d-block subpage__subtitle--extended">1</b>
        </div>
        <div class="col">
            <b class="d-block subpage__subtitle--extended">2</b>
        </div>
        <div class="col">
            <b class="d-block subpage__subtitle--extended">3</b>
        </div>
    </div>
    <button type="button" class="btn btn-danger mt-4 mb-5" id="subpage1__button" style="font-family: var(--alt-font)"><b>Learn more <span class="bi bi-arrow-right"></span></b></button>
</div>

(site.css 奇怪的 hack,但我在使用其他方法时遇到了问题)

#subpages:hover > .subpage:not(:hover) 
    width: 0;

(HomeController.cs)

public IActionResult GetView(string viewName)

    return PartialView(viewName);

(site.js)

function capitalize(str) 
    return str.charAt(0).toUpperCase() + str.slice(1);


$(document).ready(function () 
    $(".subpage").mouseover(function () 
         $(this).load("/Home/GetView", viewName: `$capitalize($(this).attr('id'))Wide`)
    );

    $(".subpage").mouseout(function () 
         $(this).load("/Home/GetView", viewName: `$capitalize($(this).attr('id'))Narrow`)
    );
);

然而,这会导致非常不可靠的行为。每当我移动鼠标时,div 的内容就会闪烁,有时在鼠标移出时不会变回。这是我第一次将 C# 与前端混合,所以我确定我在这里犯了某种错误,但我找不到解决方案。有吗?或者我应该以某种方式彻底改变我的方法?

感谢您的帮助。

【问题讨论】:

【参考方案1】:

添加mousemove怎么样?

$(".subpage").mousemove(function()
  $(this).load("/Home/GetView", viewName: `$capitalize($(this).attr('id'))Wide`)
);

【讨论】:

以上是关于Jquery 在悬停时加载 MVC 视图会导致闪烁问题的主要内容,如果未能解决你的问题,请参考以下文章

悬停时jQuery图像闪烁

悬停闪烁时弹出链接(jQuery)

CSS @keyframes 光标动画在悬停时闪烁

如何在MVC视图之间显示“正在加载”

鼠标悬停时褪色的jQuery幻灯片闪烁/队列问题(slideSwitch.js)

重新加载时阻止透明 UITableView 部分标题闪烁