Home > Technology > 鼠标悬浮实现显示留言内容(下)

鼠标悬浮实现显示留言内容(下)

上一篇讲了些基础的东西.没有实质的内容,也许根本找不到你想要的办法,说白了就是扯淡.如果那些你都很明白,那我们可以继续了

关于clone
也许你也看到上一篇的实例了,clone的只是点击的本身的内容,而我们希望的却是克隆的另一个内容.怎么办?由此我们引出了一个新的东西,attr(name).
取得第一个匹配元素的属性值。通过这个方法可以方便地从第一个匹配元素中获取一个属性的值。如果元素没有相应属性,则返回 undefined .

Access a property on the first matched element. This method makes it easy to retrieve a property value from the first matched element. If the element does not have an attribute with such a name, undefined is returned

看完解释,你是否释然了呢,没有?继续一个实例.我们修改一下上一篇提到的第二个例子.改动的地方比较多,注意比较,文档中含有中文,所以建议保存成UTF-8

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test</title>
<script type="text/javascript" src="jquery-1.2.6.min.js"></script>
<script language="javascript">
$().ready(function(){
$('.myclass a').click(function(){
$($(this).attr("href")).clone().insertAfter('.h')});});
</script>
<style type="text/css">
</style>
</head>
<body>
<p id="test">这段文字将会被克隆!</p>
<br/>
<p class="myclass"><a href="#test">test clone </a> (点击克隆上面那段文字)</p>
<p class="h">clone to here</p>
</body>
</html>

好了,我们看到点击链接的时候,段落id为test的文字被克隆了.目的达到.

接下来,我直接把我的悬浮显示留言的代码贴上,你就不难理解.用到的东西其实非常少,不是吗?看代码:

1
2
3
4
5
6
7
8
9
//match and add class
var A=/^#comment-/;
var B=/^@/;
if($('#thecomments .info .content p a').text().match(B) && $('#thecomments .info .content p a').attr('href').match(A)){
$('#thecomments .info .content p').addClass('cool');
};
//clone
$('.cool a').hover(function(){
$($(this).attr("href")).clone().hide().attr("id","").insertAfter($(this).parents("li")).addClass('tip').show('normal');},function(){$(".tip").fadeOut("normal",function(){$(this).remove()})});

这下你明白,我为什么要写两篇,并举例子了吗?这个是循序渐进的,clone的代码一行写完了,我解释一下,用$选择那个我们指定好的链接,hover即鼠标移到它上面的时候执行下面的动作.

看看hover的解释:

一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法。这是一个自定义的方法,它为频繁使用的任务提供了一种“保持在其中”的状态。
当鼠标移动到一个匹配的元素上面时,会触发指定的第一个函数。当鼠标移出这个元素时,会触发指定的第二个函数。而且,会伴随着对鼠标是否仍然处在特定元素中的检测(例如,处在div中的图像),如果是,则会继续保持“悬停”状态,而不触发移出事件(修正了使用mouseout事件的一个常见错误)。
Simulates hovering (moving the mouse on, and off, an object). This is a custom method which provides an ‘in’ to a frequent task.
Whenever the mouse cursor is moved over a matched element, the first specified function is fired. Whenever the mouse moves off of the element, the second specified function fires. Additionally, checks are in place to see if the mouse is still within the specified element itself (for example, an image inside of a div), and if it is, it will continue to ‘hover’, and not move out (a common error in using a mouseout event handler).

另外,对于parents

parents ([expr])
取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素).可以通过一个可选的表达式进行筛选.

hide show fadeOut控制出现和消失的,我还是建议你去看看文档去.也许你会得到更加满意的答案,也许,你还会创建更加有趣的效果.试试吧.有更好玩的记得和我们分享哦.

好了,到此为止,我们的克隆任务算是完成了,如果你还遇到了一些困难,去查查文档试试.不行到这里留言,我们一起讨论.

克隆完成,我们还需要它能跟着鼠标那就更加帅了.如何实现呢?这个我问过Shawn,我给了我看两篇官方的文档,终于我解决了这个.你也可以看看这篇文档.说明很好,还有实例.
好了,我贴出我的完整代码:

1
2
3
4
5
6
7
8
9
//match add class
var A=/^#comment-/;
var B=/^@/;
if($('#thecomments .info .content p a').text().match(B) && $('#thecomments .info .content p a').attr('href').match(A)){
$('#thecomments .info .content p').addClass('cool');
};
//clone
$('.cool a').hover(function(){
$($(this).attr("href")).clone().hide().attr("id","").insertAfter($(this).parents("li")).addClass('tip').show('normal');},function(){$(".tip").fadeOut("normal",function(){$(this).remove()})}).mousemove(function(e){$(".tip").css({left:(e.clientX+5),top:(e.pageY+8)})});

即,在后面加了个mousemove.

另外是对于css的处理(也许你有更好的):
我的代码是:

1
2
3
4
5
6
7
8
9
10
11
12
.tip{
position:absolute;
z-index:999;
border:1px solid #000000;
background-color:#ffffff;
padding:5px 5px;
-moz-border-radius-topleft:10px;
-moz-border-radius-topright:10px;
-moz-border-radius-bottomright:10px;
-moz-border-radius-bottomleft:10px;
width:606px;
}

说明: position:absolute;是关键,它让你复制的那块’浮’出来. -moz-border只是为了能在firefox浏览器上面有圆角的效果.width是为了解决在IE6下面宽度显示不正常而增加的.

后记:
我的实现方法,也可以说是我的学习的过程,当然中途我还看了其他的东西,走了些弯路,就不说了.快要考试,我学习也开始忙了,没有多少时间细细研究这个,权当是个人爱好.
这个所谓的’教程’也许写得很糟糕,也许你还一头雾水,不要急,慢慢来.你可以留言我们一起讨论.
最后感谢Shawn.他那里还有好多好玩的,不过这个学期没有时间研究了.

  1. Jor Dec 16th, 2008 @ 15:55 | #1

    好吧,先坐下大沙发。 :idea:

  2. xiaorsz Dec 16th, 2008 @ 16:03 | #2

    真能写哈!!呵呵!厉害!
    对了,我的阅读器里你的文章好像丢了两篇,忧伤下!!
    我上次好像也是这么搞的,怎么就不能适应不同分辨率呢!!再去看下去!

  3. yinheli Dec 16th, 2008 @ 16:08 | #3

    @xiaorsz
    不知道! 这个也有缺陷的.像你的留言分了页.就不能用这个.查询数据库.用异步的方式才行.

  4. xiaorsz Dec 16th, 2008 @ 16:14 | #4

    分页没事吧,用ajax的分页才会有问题的,一般分布会重新刷新页面的。应该没有问题吧!?

  5. yinheli Dec 16th, 2008 @ 16:18 | #5

    @xiaorsz
    有的,这个是通过获得链接的地址,然后关联上ID用clone的办法实现的.分页了,在第二页的就读不到前一页.因为它没有加载到目前的这个页面中
    就像你的那个@someone链接一样.一旦回复第一页,而回复内容跑到另一页的就无法点击@someone返回一样.
    讲的有点乱了 :mad:

  6. Shawn Dec 16th, 2008 @ 16:27 | #6

    还有个问题。这个主题的评论部分应该是用了 clear:both,所以 clone 载入也是分步的,clear both 在最下面,这样 show 的时候会有一个”竖竖横”的动作,所以你应该考虑 clone 的范围,例如放弃对头像的 clone 或者重新写 clone 的样式。还有就是 show 在 chrome 里面没有过渡,所以不太好看。

  7. Shawn Dec 16th, 2008 @ 16:29 | #7

    @xiaorsz
    因为不能跨页 clone 啊,根本没有融入异步读取数据的步骤。

  8. yinheli Dec 16th, 2008 @ 16:43 | #8

    @Shawn
    唉..不会处理了.当时想slideDown算了.但是感觉也不好看.

  9. yinheli Dec 16th, 2008 @ 17:15 | #9

    fadeIn! :mad:

  10. xiaorsz Dec 16th, 2008 @ 17:45 | #10

    @yinheli
    @Shawn
    噢,这种情况啊!应该会比较少,呵呵,跑第二页才回复! :razz: 不过确实是个问题!!

  11. iColor Dec 16th, 2008 @ 17:59 | #11

    目前看到那堆代码还比较头痛…
    上次我给 Shawn 说那个建议他好像没看到
    就是说提示框的位置会盖往评论内容,能不能把它定位到鼠标上方而不是右下方????

  12. yinheli Dec 16th, 2008 @ 18:08 | #12

    @iColor
    这个定位的问题.提议很好,但是我也不知道如何解决.要知道,每个恢复框的大小是不一样的…而目前却是通过左上角的坐标来定位.

  13. yinheli Dec 16th, 2008 @ 18:12 | #13

    @xiaorsz
    所有的情况都有可能发生.写东西就是要严谨…看看Shwan什么时候出个解决方案. :razz:

  14. 煎鱼 Dec 16th, 2008 @ 18:25 | #14

    最好搞的傻瓜安装的,这样更受欢迎,HOHO

  15. yinheli Dec 16th, 2008 @ 18:50 | #15

    @煎鱼
    拷贝我的源码修改一下就可以用了…要是主题都一样的话,直接复制….

  16. Shawn Dec 16th, 2008 @ 19:18 | #16

    @xiaorsz
    不是情况少,是这种情况会发生。再说谁也不会故意等到第二页才回复,只是必须要考虑到这种情况。

    @iColor
    不是我没看到,也不是不可以,只是每个人有每个人的考虑。一般人是从上往下翻页,如果复制框从上面出现,当 @some 在最顶端时怎么办?不是就被遮住了?所以如果你看懂这个代码你可以自己来实现,但是我目前还不想改变。

  17. Shawn Dec 16th, 2008 @ 19:20 | #17

    @yinheli
    定位完全不是问题,看来你还没有完全看懂我的代码,我的考虑和我说的一样,还是一个习惯问题。至少我不会从下向上翻页。

  18. yinheli Dec 16th, 2008 @ 19:25 | #18

    @Shawn
    呵呵… :mad: 我感觉右下方好看.多年来,我们用电脑,鼠标提示总是从下面偏右的地方冒出来,没有从另一个地方冒出来的.但是出现在上面就不会搞了.

  19. yinheli Dec 16th, 2008 @ 19:37 | #19

    对了目前定位是追踪鼠标位置.~还有去他的方式?也能实现这种让它浮出跟着鼠标.?有点好奇了,虽然不用.

  20. Zoll Dec 16th, 2008 @ 19:38 | #20

    恩 留个名 慢慢看了~我也要尝试!哈哈

  21. Zoll Dec 16th, 2008 @ 19:42 | #21

    @iColor
    我也比较赞同,不要让显示挡住了回复 这样比较直观~

  22. yinheli Dec 16th, 2008 @ 19:44 | #22

    @Zoll
    :!: 鼠标提示跑的上面去了…

  23. Zoll Dec 16th, 2008 @ 20:10 | #23

    呵呵 修改代码后~我实现了^^ 不过接下来改CSS

  24. kerby Dec 16th, 2008 @ 21:27 | #24

    这个效果真的很炫,但是我觉得鼠标放上去弹出悬浮框,但是鼠标离开就消失了

    有时候会遇到这样的情况:想点点悬浮框里提问者的网站

    或者看了其他人的回复觉得自己有更好的解答,这个时侯就不得不再找到提问者的内容,然后点回复,不能直接点悬浮框里的回复

    上面两个方面要是能实现的话就更好了,不过yinheli已经很棒了,我是不想折腾了,呵呵,懒 :smile:

  25. JoBru Dec 16th, 2008 @ 21:31 | #25

    这个效果确实不错,需不需要稍微提醒一下?喜欢鼠标乱动的人可能会发现,但有的人可能就不会注意到

Submitting Comment, Give me a second...
Comment pages 1 2 3

Leave a comment

Allowed tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">
Trackbacks & Pingbacks ( 6 )
  1. Apr 30th, 2009 @ 22:40 | #1
    Pingback: 机会就在你面前-MT ONLINE » iNove 中鼠标悬浮显示 @ 评论
  2. Dec 22nd, 2009 @ 19:05 | #2
    Pingback: iNove 中鼠标悬浮显示 @ 评论 — HuāGuǒShān–老孙的博客
  3. Apr 9th, 2010 @ 12:14 | #3
    Pingback: WordPress 评论模板 – 网页制作1 – 随心笔记 – jQuery – WordPress – 评论 – 网络青年
  4. May 23rd, 2010 @ 19:37 | #4
    Pingback: WordPress 评论模板 – Yin
  5. Jun 15th, 2010 @ 09:08 | #5
    Pingback: 新主题Green living上线测试. | 阿邙’S Blog
  6. Aug 14th, 2010 @ 23:08 | #6
    Pingback: WordPress)非跨页悬浮显示你回复之人的评论内容 | MOPVHS's Blog