我想为网页的一部分设置淡入/淡出突出显示颜色,该部分跳转到以下格式的链接<a href="sectiongoto">Link</a>
,其中sectiongoto标识名称/ID 元素。
这与单击指示您有新消息的 Stack Overflow 收件箱链接的方式相同。当您导航/跳转到相关帖子时,帖子的背景会以橙色色调淡入,然后淡出。
如何在我目前正在开发的网站上实现这种效果?我使用 Firebug 查看了 SO 页面的源代码,但没有看到任何链接。
您可能正在寻找 :target 伪类
我还没有看过 SO 脚本,但我相当肯定淡入淡出是 JavaScript 的事情。它可以通过 CSS 过渡来完成,但这通常用于诸如悬停/焦点的淡入和淡出颜色之类的事情。
http://www.w3.org/TR/selectors/#target-pseudo
http://caniuse.com/#search=target
假设您有这样的示例标记
<ul>
<li><a href="#target1">Go To 1</a></li>
<li><a href="#target2">Go To 2</a></li>
</ul>
<div id="target1"><!--Your HTML Here --></div>
<div id="target2"><!--Your HTML Here --></div>
然后你想要这样的 CSS
div:target { background-color:orange; }
这样当您的用户单击列表中的链接时,您的 url 将采用哈希码 #target1 或 #target2,并且页面中适用的目标现在具有橙色背景色。
所以..您需要查看的是在 URL中使用片段标识符的概念。
维基百科条目的摘录
*强调是我的...片段标识符是一个短字符串,它指的是从属于另一个主要资源的资源。主要资源由统一资源标识符 (URI) 标识,片段标识符指向从属资源。
我更喜欢称它为 URL 哈希标签,因为在 JavaScript 中用于检索它们的方法是
window.location.hash
. 随心所欲地称呼它-这是解释:
让我们以我的答案的 URL 为例:
啊哈!但是在发布之前我是如何获得 URL 的?;)
https://stackoverflow.com/questions/10017592/highlighting-a-section-of-a-web-page-the-way-so-does-with-inbox-links/10036643#10036643
所以哈希值#10036643
在 URL 的末尾。您可以通过检查window.location.hash
变量来获得该值。可以使用相同的语法将元素添加到哈希列表 -
window.location.hash += "#more_info"
可以轻松创建多个键值对来存储更多信息:
http://foobar.com/#one=1#two=2#three=3
window.location.hash
现在将给我们: #one=1#two=2#three=3
从那里我们可以简单地使用以字符作为分隔符的.split()
函数。#
那应该给你这样的东西:
["", "one=1", "two=2", "three=3"]
从数组中弹出第一个空元素,然后对于每个键/值对,您可以做一个额外的.split('=')
或者干脆不使用键作为值,只需要像这样的哈希值:
http://foobar.com/post/how-to/#COMMENT_ID
现在我们知道如何将信息嵌入到 URL 中,我们可以开始解析它了。为了这个例子,我们假设一个简单的 HTML 结构像这样 -
...
<body>
<div>
Page Header
</div>
<div class="blog_post">
An interesting section of content.
<div class="comment cid0" ></div>
</div>
<div class="blog_post">
More fantastic information (and a special offer).
<div class="comment cid0" ></div>
<div class="comment cid1" ></div>
</div>
<div>
Page Footer
</div>
</body>
...
鉴于此 URL: http://foobar.com/post/how-to/#cid1
您可以在函数中使用一些 JavaScriptdocument.ready
来控制在哪里绘制焦点 -
$(function(){
// Extract comment id from URL
var targetElementId = window.location.hash.split("#")[1]; // This gives us 456
var targetElement = $(".comment ."+targetElementId);
var targetElementOffset = targetElement.offset();
$('body').scrollTop(targetElementOffset.top);
// Insert highlight functionality here
});
关于突出显示,我认为Kerian 的回答几乎涵盖了它 - 您需要使用一些依赖于浏览器的功能,例如CSS Transitions。
您也许还可以摆脱一些替代方案-您可以使用这些建议来激发您的想象力-
在该元素的所有内容后面放置一个重复的 1x1px 略微透明的颜色,并.fadeOut()
在一定延迟后简单地使用该功能将其隐藏。
动画背景图像background-position
也许通过回调循环通过一些预定义background-color
的属性setInterval