Jquery 代码可以工作,但必须有一种方法来精简它

标签 jquery hashtag slim

我终于成功地让这段代码正常工作,它根据 URL 中的主题标签以及 div 是否接触窗口的顶部或底部来淡入和淡出。 jQuery 看起来像这样:

var distanceFromTop = $(window).scrollTop(),
    distanceFromBottom = $(window).scrollTop() + $(window).height();

var divOneFromTop = $("#div-one").offset().top,
    divOneFromBottom = divOneFromTop + $("#div-one").height();

if (window.location.hash == "#div-one" && distanceFromTop >= divOneFromTop && !(distanceFromBottom > divOneFromBottom)) {
    $(".div-one-info").fadeIn(300);
} else {
    $(".div-one-info").fadeOut(300);
}

var divTwoFromTop = $("#div-two").offset().top,
    divTwoFromBottom = divTwoFromTop + $("#div-two").height();

if (window.location.hash == "#div-two" && distanceFromTop >= divTwoFromTop && !(distanceFromBottom > divTwoFromBottom)) {
    $(".div-two-info").fadeIn(300);
} else {
    $(".div-two-info").fadeOut(300);
}

问题是我还需要大约八个 div,而且我重复自己的时间太长了。有谁知道我如何简化它并使其更加“自动化”,这样我就不必一直编写#div-one 和 divOne 等?

最佳答案

类似于以下内容:

var id = window.location.hash;

var divFromTop = $(id).offset().top,
    divFromBottom = divFromTop + $(id).height();

if (distanceFromTop >= divFromTop && !(distanceFromBottom > divFromBottom)) {
    $(id.replace("#", ".") + "-info").fadeIn(300);
} else {
    $(id.replace("#", ".") + "-info").fadeOut(300);
}

您可能可以使其更具可读性,但基本思想是使用文档位置哈希来识别必要的元素。

关于Jquery 代码可以工作,但必须有一种方法来精简它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21885540/

相关文章:

jquery - 如何为包含错误/有效输入字段的 div 添加一些样式?

javascript - PHP 无法读取 jQuery.ajax POST 中发送的数据

javascript - 如何触发 Chrome 扩展,URL 中给定哈希的内容脚本?

javascript - 如何为单页 jQuery 登录、注册和忘记密码表单适当更改 url

javascript - 如何使用 JavaScript 验证输入字段

javascript - 我如何修改jquery短信计数器

javascript - 解析字符串中的主题标签( anchor 标记除外)

php - Slim 3.1 ubuntu 服务器错误

PHP & Twig : Trouble accessing variables in template

php - 在 Slim Framework v3 中访问多个 GET 参数