热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

同志们帮忙看看CSDN上的这个网页效果是怎么实现的?

就是鼠标移动到用户头像上时出现一副框框,里面写着这个用户的帐号,昵称,最新帖子等。我想知道怎么实现这个效果,我想大致的思路应该是鼠标划过头像区域时显示了另外一个图片(我已经用资源查看器查过了,那个框框
就是鼠标移动到用户头像上时出现一副框框,里面写着这个用户的帐号,昵称,最新帖子等。我想知道怎么实现这个效果,我想大致的思路应该是鼠标划过头像区域时显示了另外一个图片(我已经用资源查看器查过了,那个框框确实是一副图片),我比较头疼的是这个图片定位是怎么定位的,还有上面的字是怎么定位的。这个是css实现的还是 Javascript实现的(如果不考虑字的来源),最好来段代码,我是新手,还望多多包涵。

10 个解决方案

#1


这划过的时候不是个DIV么,怎么变图片了。整个FIREBUG看看你就知道了。

#2


鼠标 移到  头像上 获取 相对的 位置  
弹出的div 设置offsetLeft,offsetTop值

#3


引用 2 楼 vnetcbd 的回复:
鼠标 移到  头像上 获取 相对的 位置  
弹出的div 设置offsetLeft,offsetTop值

除了这个以外,因为这个弹出层是在其他层之上,所以必须把它的CSS属性里的z-index:1000,设置得高一点!
其实图就是放在
里,
,位置由div来控制,让JS去动态设置DIV的位置,就像2#所说的方法!

#4


这个是需要css+js来实现的,提供一种方案:
在头像img后面插入需要鼠标经过显示的图层,设置该图层display:none;(css,这个图层position需要设置absolute),(当然图层上面的数据,应该是从后台获取的js),鼠标经过时,显示该图层(js)

#5


这个是需要css+js来实现的,提供一种方案:
在头像img后面插入需要鼠标经过显示的图层,设置该图层display:none;(css,这个图层position需要设置absolute),(当然图层上面的数据,应该是从后台获取的js),鼠标经过时,显示该图层(js)

#6


再详细一点啊,晕,技不如人,唉

#7




function showUserCard(sender, username) {
    if (!window.loaded) return; // 未加载
    if (!currentUserCard) {
        //if (!panelTopicAdmin) return; 
        currentUserCard = new CsdnUserCard(); //*/
    }
    var point = absolutePoint(sender);
    currentUserCard.owner = sender;
    currentUserCard.show(point.x + 65, point.y, username, sender.src);
    currentUserCard.mouseover = function(e) {
        var element = typeof event != "undefined" ? event.srcElement : e.target;
        var hotCard = false;
        while (element) {
            hotCard = element == currentUserCard.owner || element == currentUserCard.div_card;
            if (hotCard) break;
            element = element.parentNode;
        }
        if (!hotCard) {
            removeEventHandler(document, "mouseover", currentUserCard.mouseover);
            currentUserCard.close();
        }
    }
    addEventHandler(document, "mouseover", currentUserCard.mouseover);
}

#8


/*//
标题:用户资料
设计:ZswangY37
版权:CSDN.NET
版本:2008103101
//*/

function CsdnUserCard() {
    this.hot = false;

    this.div_card = document.createElement("div");
    with (this.div_card.style) {
        borderStyle = "none";
        borderWidth = "0";
        display = "none";
        width = "357px";
        height = "194px";
        position = "absolute";
        textAlign = "left";
        background = "transparent url(/u/ui/styles/default/topic/bgUserCard.gif) no-repeat scroll 0 0";
        fontFamily = "Verdana,Arial,Helvetica,sans-serif";
    }
    this.div_card.card = this;
    document.body.appendChild(this.div_card);

    this.table_card = document.createElement("table");
    with (this.table_card.style) {
        top = "12px";
        left = "56px";
        position = "relative";
        width = "290px";
    }
    this.table_card.cellSpacing = "0";
    this.table_card.cellPadding = "0";
    this.table_card.border = "0";
    this.div_card.appendChild(this.table_card);

    this.tr_card = this.table_card.insertRow(-1);
    this.td_left = this.tr_card.insertCell(-1);
    with (this.td_left.style) {
        lineHeight = "170%";
        textAlign = "center";
        verticalAlign = "top";
        width = "80px";
    }
    this.a_face = document.createElement("a");
    this.a_face.target = "_blank";
    this.a_face.title = "进入个人空间";
    this.a_face.style.color = "#01359D";
    this.a_face.target = "_blank";
    this.td_left.appendChild(this.a_face);

    this.td_right = this.tr_card.insertCell(-1);
    with (this.td_right.style) {
        lineHeight = "170%";
        textAlign = "left";
        verticalAlign = "top";
    }

    this.img_face = document.createElement("img");
    this.a_face.appendChild(this.img_face);
    with (this.img_face.style) {
        border = "1px solid #5B7790";
        width = "70px";
    }

    this.br_face = document.createElement("br");
    this.td_left.appendChild(this.br_face);

    this.a_space = document.createElement("a");
    this.a_space.innerHTML = "个人空间";
    this.a_space.title = "进入个人空间";
    this.a_space.target = "_blank";
    this.td_left.appendChild(this.a_space);
    with (this.a_space.style) {
        color = "#01359D";
        textDecoration = "none";
        verticalAlign = "middle";
    }

    this.br_space = document.createElement("br");
    this.td_left.appendChild(this.br_space);

    this.a_addFriend = document.createElement("a");
    this.a_addFriend.target = "_blank";
    this.a_addFriend.title = "加为好友";
    this.td_left.appendChild(this.a_addFriend);

    this.img_addFriend = document.createElement("img");
    this.img_addFriend.src = "http://c.csdn.net/bbs/f/i/blank.gif";
    this.a_addFriend.appendChild(this.img_addFriend);

    with (this.img_addFriend.style) {
        background = "transparent url(/u/ui/styles/default/topic/addFriend.gif) no-repeat scroll 0 0";
        height = "17px";
        marginBottom = "5px";
        width = "61px";
        border = "medium none";
    }

    this.br_addFriend = document.createElement("br");
    this.td_left.appendChild(this.br_addFriend);

    /*
    this.a_message = document.createElement("a");
    this.a_message.target = "_blank";
    this.a_message.title = "发消息";
    this.td_left.appendChild(this.a_message);

    this.img_message = document.createElement("img");
    this.img_message.src = "http://c.csdn.net/bbs/f/i/blank.gif";
    this.a_message.appendChild(this.img_message);

    with (this.img_message.style) {
    background = "transparent url(/u/ui/styles/default/topic/sendIMMsg.gif) no-repeat scroll 0 0";
    height = "17px";
    marginBottom = "5px";
    width = "61px";
    border = "medium none";
    }

    this.br_message = document.createElement("br");
    this.td_left.appendChild(this.br_message);
    */

    this.a_blog = document.createElement("a");
    this.a_blog.target = "_blank";
    this.a_blog.title = "浏览博客";
    this.td_left.appendChild(this.a_blog);

    this.img_blog = document.createElement("img");
    this.img_blog.src = "http://c.csdn.net/bbs/f/i/blank.gif";
    this.a_blog.appendChild(this.img_blog);

    with (this.img_blog.style) {
        background = "transparent url(/u/ui/styles/default/topic/goBlog.gif) no-repeat scroll 0 0";
        height = "17px";
        marginBottom = "5px";
        width = "61px";
        border = "medium none";
    }

    this.span_username = document.createElement("span");
    this.span_username.innerHTML = "帐号:";
    this.td_right.appendChild(this.span_username);

    this.a_username = document.createElement("a");
    with (this.a_username.style) {
        color = "#01359D";
        fontStyle = "normal";
        textDecoration = "none";
    }
    this.td_right.appendChild(this.a_username);

    this.br_nickname = document.createElement("br");
    this.td_right.appendChild(this.br_nickname);

    this.span_nickname = document.createElement("span");
    this.span_nickname.innerHTML = "昵称:";
    this.td_right.appendChild(this.span_nickname);

    this.a_nickname = document.createElement("a");
    this.a_nickname.innerHTML = "载入中...";
    with (this.a_nickname.style) {
        color = "#01359D";
        fontStyle = "normal";
        textDecoration = "none";
    }
    this.td_right.appendChild(this.a_nickname);

    this.br_nickname = document.createElement("br");
    this.td_right.appendChild(this.br_nickname);

    this.span_topics = document.createElement("span");
    this.span_topics.innerHTML = "最新帖子:";
    this.td_right.appendChild(this.span_topics);

    this.br_topics = document.createElement("br");
    this.td_right.appendChild(this.br_topics);

    this.ol_topics = document.createElement("ol");
    this.td_right.appendChild(this.ol_topics);

    this.li_topics = {};
    this.a_topics = {};
    for (var i = 0; i < 3; i++) {
        this.li_topics[i] = document.createElement("li");
        this.li_topics[i].style.listStyleType = "decimal";
        this.a_topics[i] = document.createElement("a");
        this.a_topics[i].target = "_blank";
        with (this.a_topics[i].style) {
            color = "#01359D";
            textDecoration = "none";
        }
        this.li_topics[i].appendChild(this.a_topics[i]);
        this.li_topics[i].style.display = "none";
        this.ol_topics.appendChild(this.li_topics[i]);
    }

    this.a_more = document.createElement("a");
    this.a_more.innerHTML = "更多帖子...";
    this.a_more.title = "浏览更多发帖";
    this.a_more.target = "_blank";
    this.td_right.appendChild(this.a_more);

    with (this.a_more.style) {
        marginLeft = "90px";
        color = "#01359D";
        fontStyle = "normal";
        textDecoration = "none";
    }
}

CsdnUserCard.prototype.close = function() {
    this.div_card.style.display = "none";
    if (typeof this.onclose == "function") this.onclose(this);
}

CsdnUserCard.prototype.show = function(left, top, username, face) {
    this.username = username;
    this.a_face.href = "http://hi.csdn.net/" + username;
    this.a_space.href = "http://hi.csdn.net/" + username;
    this.a_addFriend.href = "http://webim.csdn.net/AddFriends/" + username + ".ashx";
    //this.a_message.href = "http://webim.csdn.net/Messages/" + username + ".ashx";
    this.a_blog.href = "http://blog.csdn.net/" + username;
    this.a_username.href = "http://hi.csdn.net/" + username;
    this.a_nickname.href = "http://hi.csdn.net/" + username;
    this.a_more.href = "https://forum.csdn.net/PointForum/Forum/UserTopicList.aspx?user=" + username;
    var userCard = this;
    if (!CsdnUserCard.userInfos[username]) {
        for (var i = 0; i < 3; i++)
            this.li_topics[i].style.display = "none";
        callScript("https://forum.csdn.net/PointForum/UserCard.ashx?user=" + username, function() {
            userCard.doUserChange(username);
        });
    }
    else this.doUserChange(username);
    this.div_card.style.left = left + "px";
    this.div_card.style.top = top + "px";
    this.div_card.style.display = "";
    this.a_username.innerHTML = username;
    this.img_face.src = face;
}

CsdnUserCard.prototype.doUserChange = function(username) {
    if (this.username != username) return;
    if (!CsdnUserCard.userInfos[username]) return;
    this.a_nickname.innerHTML = CsdnUserCard.userInfos[username].nickname;
    for (var i = 0; i < 3; i++) {
        if (CsdnUserCard.userInfos[username].topicList[i]) {
            this.a_topics[i].href = CsdnUserCard.userInfos[username].topicList[i].url;
            var text = CsdnUserCard.userInfos[username].topicList[i].text;
            text = text.replace(/\s \s/g, " ").replace(/                 replace(/>/g, ">").replace(/"ed;/g, '"');
            this.a_topics[i].innerHTML = text.match(/^[\s\S]{1,12}/)[0].replace(/[<>" ]/g, function($0) {
                return { "<": "<", ">": ">", " ": " " } [$0];
            });
            /*this.a_topics[i].innerHTML = text.replace(
            /^(.{12})(.*?)$/, "$1…").replace(/@/g, '@').replace(/&(?![a-z]+;)/g, '&');*/
            this.a_topics[i].title = text;

            this.li_topics[i].style.display = "";
        } else this.li_topics[i].style.display = "none";
    }
}

CsdnUserCard.userInfos = {};

function UserCardCallback(json) {
    if (typeof json == "undefined" || !json.username) return;
    CsdnUserCard.userInfos[json.username] = json;
}

原来是zswang清洁工大师的大作,难道是csdn的员工?
详细参考:
http://topic.csdn.net/u/t5/t5.js

#9


http://hi.csdn.net/zswang

[img=http://topic.csdn.net/u/t5/t5.js][/img]

#10


已经说的那么明显了!简单不能再简单了,CSDN只是隐藏了个人信息,然后指向头像再显示而已,而且样式已经控制了它的位置!

推荐阅读
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
  • 利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Exce ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
  • 深入解析 Vue 中的 Axios 请求库
    本文深入探讨了 Vue 中的 Axios 请求库,详细解析了其核心功能与使用方法。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。文章首先介绍了 Axios 的基本概念,随后通过具体示例展示了如何在 Vue 项目中集成和使用 Axios 进行数据请求。无论你是初学者还是有经验的开发者,本文都能为你解决 Vue.js 相关问题提供有价值的参考。 ... [详细]
  • 一篇关于五个编程问题的 Reddit 帖子引发了广泛讨论,特别是关于这些题目是否适合所有软件工程师。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带 1 或 0 ... [详细]
  • 本文全面解析了 Python 中字符串处理的常用操作与技巧。首先介绍了如何通过 `s.strip()`, `s.lstrip()` 和 `s.rstrip()` 方法去除字符串中的空格和特殊符号。接着,详细讲解了字符串复制的方法,包括使用 `sStr1 = sStr2` 进行简单的赋值复制。此外,还探讨了字符串连接、分割、替换等高级操作,并提供了丰富的示例代码,帮助读者深入理解和掌握这些实用技巧。 ... [详细]
  • 在试用版软件中,为了提升用户体验并有效提醒用户剩余的使用次数,本文通过Java IO文件操作实现了一个试用版软件的使用次数提示机制。具体而言,每次启动软件时,程序会读取存储在文件中的剩余使用次数,并在每次执行后更新该数值。当用户启动软件时,系统会显示当前剩余的使用次数,确保用户清楚了解自己的试用状态。该机制不仅提高了软件的友好性,还增强了用户的购买意愿。 ... [详细]
author-avatar
阿笨猫
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有