使用 jquery 和 php 的动态导航栏(带图像)-鼠标悬停效果的问题

发布于 2024-10-31 11:19:42 字数 1536 浏览 3 评论 0原文

我正在构建一个由 PHP 控制的动态导航栏,并且我在列表中使用图像。我正在应用 jQuery 来实现“悬停”效果。这是 PHP 代码:

$path = $_SERVER['PHP_SELF'];
$page = basename($path);
$page = basename($path, '.php');

在我的导航列表中,我使用 PHP 'if' 语句根据 $page 的返回值设置 'display:none' 和 'display:inline' 。查看代码:

<ul id="cssdropdown">
  <li class="headlink">
  <a class="lightNav" href="index.php"  <?php if($page == 'index'){echo "style='display:none !important'";}else{echo "style='display:inline'";}?>><img src="images/navButtons/home.png" /></a>
  <a class="darkNav" href="index.php" <?php if($page == 'index'){echo "style='display:inline !important'";}else{echo "style='display:none'";}?>><img src="images/navButtons/home-dark.png" /></a>
  </li>....

这一切工作正常,导航栏图像的显示根据用户所在的页面而变化。但我的问题是现在我正在尝试集成 jQuery 以获得漂亮的“鼠标悬停/悬停”效果。请参阅 jQuery 代码:

$("li.headlink").hover(function(){
  $(this).find("a.lightNav").css("display", "none");
  $(this).find("a.darkNav").css("display", "inline");
},function(){
  $(this).find("a.lightNav").css("display", "inline");
  $(this).find("a.darkNav").css("display", "none");
});

但这会导致问题。当用户将光标移动到当前页面导航栏中的图像(即“深色”图像)上时,它会删除 PHP 设置的显示属性(显然)。

所以我需要一种方法来检查鼠标悬停时“darkNav”是否显示“内联”或“无”,并从那里定制我的 jQuery,但我一生都不知道该怎么做,我不是世界上最伟大的javascript/jQuery 编码器。有没有办法检查某个元素是否应用了特定的 CSS 属性,我用谷歌搜索并摆弄了我的代码几个小时,但无济于事。

预先感谢大家。

PS 我在 PHP if 语句中的导航栏中添加了 CSS !important ,但由于某些奇怪的原因,这仅在 Chrome 中有效,所有其他浏览器都忽略此规则。

I'm building a dynamic navigation bar which is controlled by PHP, and I'm using images within my list. And I'm applying jQuery for the 'hover' effects. This is the PHP code:

$path = $_SERVER['PHP_SELF'];
$page = basename($path);
$page = basename($path, '.php');

And in my navigation list I'm setting 'display:none' and 'display:inline' depending on the return value of $page using a PHP 'if' statement. See code:

<ul id="cssdropdown">
  <li class="headlink">
  <a class="lightNav" href="index.php"  <?php if($page == 'index'){echo "style='display:none !important'";}else{echo "style='display:inline'";}?>><img src="images/navButtons/home.png" /></a>
  <a class="darkNav" href="index.php" <?php if($page == 'index'){echo "style='display:inline !important'";}else{echo "style='display:none'";}?>><img src="images/navButtons/home-dark.png" /></a>
  </li>....

This is all working fine, the display of the Nav bar images change depending on what page the user is at. But my problem is now I'm trying to integrate jQuery to get a nice 'mouseover / hover' effect. See jQuery code:

$("li.headlink").hover(function(){
  $(this).find("a.lightNav").css("display", "none");
  $(this).find("a.darkNav").css("display", "inline");
},function(){
  $(this).find("a.lightNav").css("display", "inline");
  $(this).find("a.darkNav").css("display", "none");
});

But this is causing problems. When the user moves the cursor over the image in the Nav bar for the current page (ie the 'dark' image), it removes the display attribute set by PHP (obviously).

So I need a way to check on mouseover if 'darkNav' has display 'inline' or 'none' and tailor my jQuery from there, but for the life of me I cannot figure out how to do, I'm not the worlds greatest javascript/jQuery coder. Is there a way to check if an element has a particular CSS property applied to it, I googled and fiddled with my code for hours, but to no avail.

Thanks in advance everyone.

P.S. I added the CSS !important in my nav bar within the PHP if statement, but this for some strange reason, is only working in Chrome, all other browsers are ignoring this rule.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

最偏执的依靠 2024-11-07 11:19:43

使用 jQuery,您可以检查如下属性值:

...您的代码...

  alert($(this).find("a.lightNav").css("display"))

至于使用 jQuery 隐藏/显示元素,只需使用:

  $(this).find("a.lightNav").hide()
  $(this).find("a.darkNav").show()

无需摆弄“显示”,它已经内置于 中隐藏()/显示()。您也不应该使用它:

style='display:inline !important'"

默认情况下,显示已经是blockinline,因此除非您使用“display:none”,否则通常可以将它们排除在外。

如果你有一个左浮动菜单,你应该使用 float:left,而不是 display:inline

内联样式也会覆盖样式表 CSS,所以你永远不需要使用 >!重要

关于样式菜单的一个提示是,设计 A 标签,而不是 LI。将事件放在 A 标签上,而不是 LI 上。

如果您想了解如何正确设置菜单样式,请参阅我的教程:
我喜欢列表

with jQuery you can check an attribute value like this:

... your code...

  alert($(this).find("a.lightNav").css("display"))

As far as using jQuery to hide/show elements, simply use:

  $(this).find("a.lightNav").hide()
  $(this).find("a.darkNav").show()

No need to fiddle with "display", it's already built-into hide()/show(). You should not need use this either:

style='display:inline !important'"

By default the display is already block or inline, so unless you're using "display:none" you can usually lave these out.

If you have a left-floating menu you should be using float:left, not display:inline

Also inline styles override stylesheet CSS, so you should never need to use !important.

One hint at styling menus, style the A-tag, not the LI. Put the events on the A tags, not the LIs.

If you want to learn how to style menus properly, see my tutorial:
I love lists.

转瞬即逝 2024-11-07 11:19:43

“所以我需要一种方法来检查鼠标悬停时“darkNav”是否显示“内联”或“无”......”

这是未经测试的,但您可以尝试类似的方法...


   if ($(this).attr('style') == "display:none") {
     // do something
   }
   else if ($(this).attr('style') == "display:inline") {
     // do something
   }

但是,您可能想尝试 addClass() 和 removeClass () 而不是更改和/或使用内联 CSS。

"So I need a way to check on mouseover if 'darkNav' has display 'inline' or 'none'.."

This is untested but you could try something like...


   if ($(this).attr('style') == "display:none") {
     // do something
   }
   else if ($(this).attr('style') == "display:inline") {
     // do something
   }

However, you may want to try addClass() and removeClass() instead of changing and/or using inline CSS.

何其悲哀 2024-11-07 11:19:43

是的..我第二点是使用 addClass()l 和 removeClass() 会加载得更好...一些代码

if($(this).hasClass('visible') {
  // do something
}
else {
  // do something else
}

看起来更好、专业且可读...但只是我说...

yep..i'd second that using addClass()l and removeClass() would be loads better...some code like

if($(this).hasClass('visible') {
  // do something
}
else {
  // do something else
}

seems far better and professional and readable...but just me saying...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文