第三章 (案例项目-超链接和图片提示效果)

1 超链接提示

<a href="#" title="这是我的超链接提示1"> 提示 </a>

一般用 title 标签提示,缺点是响应速度慢,用 jQ 来手写类似功能。

HTML

<p><a href="#" class="tooltip" title="这是我的提示1">提示1</a></p>
<p><a href="#" class="tooltip" title="这是我的提示2">提示2</a></p>
<p><a href="#" title="这是自带提示1">自带提示2</a></p>
<p><a href="#" title="这是自带提示2">自带提示2</a></p>

CSS

body{
    margin:0;
    padding:40px;
    background:#fff;
    font:80% Arial, Helvetica, sans-serif;
    color:#555;
    line-height:180%;
}
p{
    clear:both;
    margin:0;
    padding:.5em 0;
}
/* tooltip */
#tooltip{
    position:absolute;
    border:1px solid #333;
    background:#f7f5d1;
    padding:1px;
    color:#333;
    display:none;
}

鼠标移动文字上,会显示 title 属性的文字

为 class 为 tooltip 的超链接添加 mouseover 和 mouseout 事件

<script type="text/javascript">

        $("a.tooltip").mouseover(function(){
            // 显示 title
        }).mouseout(function(){
            // 隐藏 title
        })        

</script>

思路:

(1)当鼠标划入超链接

①创建一个<div>元素,内容为title值

②将创建的元素追加到文档中

③为它设置 X 坐标和 Y 坐标,使它显示在鼠标位置的旁边

(2)当鼠标画出超链接时,移除<div>元素

jQuery

<script type="text/javascript">
    $(function(){
        $("a.tooltip").mouseover(function(e){
            var tooltip = "<div id='tooltip'>" + this.title+"</div>"; //创建 div 元素
            $("body").append(tooltip);     // 将它追加到文档中
            $("#tooltip")
                .css({
                    "top":e.pageY + "px",
                    "left":e.pageX + "px"
                }).show("fast");          // 设置X坐标和Y坐标,并显示
        }).mouseout(function(){
            $("#tooltip").remove();
        })
    })
</script>

 运行效果有2个问题,当鼠标滑过后,<a> 标签中的title属性提示也会出现,其次是设置 x和y坐标的问题,由于自制的提示与鼠标的距离太近,有时候会引起无法提示

首先移除<a>标签中的title提示功能

①当鼠标滑入时,给对象添加一个新属性。并把title值传给这个属性,然后清空属性title值

    this.myTitle = this.title;
    this.title = "";
    var tooltip = "<div id='tooltip'>"+this.title+"</div>"; 
    //创建 <div> 元素            

②当鼠标滑出时,再把对象的 myTitle 属性的值又赋给属性 title

this.title = this.myTitle;

• 为什么当鼠标滑出时,又把属性值赋给 title??

因为当鼠标滑出时,需要考虑再次滑入时的 title 值,如果不将 myTitle 的值重新赋给 title ,当再次滑入时,title 值将为空。

上述问题2,无法提示问题,可以重新设置 top 和 left 值

        var x = 10;
        var y = 20;
        $("#tooltip").css({
            "top": (e.pageY+y)+"px";
            "left": (e.pageX+x)+"px";
        })

全部修改后完整代码为:

    <script type="text/javascript">
        $(function(){
            var x = 10;
            var y = 20;
            $("a.tooltip").mouseover(function(e){
                this.myTitle = this.title;
                this.title = "";
                var tooltip = "<div id='tooltip'>"+this.myTitle+"</div>"; //创建 <div> 元素
                $("body").append(tooltip);
                $("#tooltip")
                    .css({
                        "top": (e.pageY+y)+"px",
                        "left": (e.pageX+x)+"px"
                    }).show("fast");
            }).mouseout(function(e){
                this.title = this.myTitle;
                $("#tooltip").remove();
            });
        })
    </script>

当鼠标在超链接上移动时,提示效果不会跟着鼠标移动,可以为超链接加一个 mousemove 事件

$(function(){
    var x = 10;  
    var y = 20;
    $("a.tooltip").mouseover(function(e){
           this.myTitle = this.title;
        this.title = "";    
        var tooltip = "<div id='tooltip'>"+ this.myTitle +"</div>"; //创建 div 元素
        $("body").append(tooltip);    //把它追加到文档中
        $("#tooltip")
            .css({
                "top": (e.pageY+y) + "px",
                "left": (e.pageX+x)  + "px"
            }).show("fast");      //设置x坐标和y坐标,并且显示
    }).mouseout(function(){        
        this.title = this.myTitle;
        $("#tooltip").remove();   //移除 
    }).mousemove(function(e){
        $("#tooltip")
            .css({
                "top": (e.pageY+y) + "px",
                "left": (e.pageX+x)  + "px"
            });
    });
})

2 图片提示效果

点击小图片时大图显示,并且大图随着鼠标移动而移动。

基本结构样式如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript" src="jquery.min.js"></script>
    <style type="text/css">
        body{
            margin: 0;
            padding: 40px;
            font: 80% Arial,Helvetica,sans-serif;
            color: #555;
            background: #fff;
            line-height: 180%;
        }
        img{
            border: none;
        }
        ul,li{
            margin: 0;padding: 0;
        }
        li{
            list-style: none;
            float: left;
            display: inline;
            margin-right: 10px;
            border: 1px solid #aaa;
        }

        /* tooltip */
        #tooltip{
            position: absolute;
            border: 1px solid #ccc;
            background: #333;
            padding: 2px;
            display: none;
            color: #fff;
        }
    </style>
</head>
<body>
        <ul>
            <li><a href="images/apple_1_bigger.jpg" class="tooltip" title="苹果 iPod"><img src="images/apple_1.jpg" alt="苹果 iPod" /></a></li>
            <li><a href="images/apple_2_bigger.jpg" class="tooltip" title="苹果 iPod nano"><img src="images/apple_2.jpg" alt="苹果 iPod nano"/></a></li>
            <li><a href="images/apple_3_bigger.jpg" class="tooltip" title="苹果 iPhone"><img src="images/apple_3.jpg" alt="苹果 iPhone"/></a></li>
            <li><a href="images/apple_4_bigger.jpg" class="tooltip" title="苹果 Mac"><img src="images/apple_4.jpg" alt="苹果 Mac"/></a></li>
        </ul>
</body>
</html>

§ 参考上例超链接提示效果。只需要修改 <div> 代码即可

var tooltip = "<div id='tooltip'>"+ this.myTitle +"</div>";  

// 修改为

var tooltip = "<div id='tooltip'><img src='"+ this.href +"' alt='产品预览图'> </div>";

为加强效果,可在预览的大图下添加文字说明

方法:

可根据 title 值来获得图片相应的介绍文字

this.myTitle = this.title;
this.title = "";    
var imgTitle = this.myTitle ? "<br/>" + this.myTitle : "";

然后将它追加到 <div> 元素中

var tooltip = "<div id='tooltip'><img src='"+ this.href +"' alt='产品预览图'/>"+imgTitle+"</div>"; //创建 div 元素

上述 var a = b ? c : d ; 是三元运算符。(声明a ,它的值为 b ,如果 b 为真,取值为 c ,否则取值为 d)

var imgTitle = this.myTitle? "<br/>" + this.myTitle : "";

//等价于

var imgTitle;
if(this.myTitle){
    imgTitle = "<br/>" + this.myTitle;
}else{
    imgTitle = "";
}

完整代码:

<script type="text/javascript">

$(function(){
    var x = 10;
    var y = 20;
    $("a.tooltip").mouseover(function(e){
        this.myTitle = this.title;
        this.title = "";    
        var imgTitle = this.myTitle? "<br/>" + this.myTitle : "";
        var tooltip = "<div id='tooltip'><img src='"+ this.href +"' alt='产品预览图'/>"+imgTitle+"</div>"; //创建 div 元素
        $("body").append(tooltip);    //把它追加到文档中                         
        $("#tooltip")
            .css({
                "top": (e.pageY+y) + "px",
                "left":  (e.pageX+x)  + "px"
            }).show("fast");      //设置x坐标和y坐标,并且显示
    }).mouseout(function(){
        this.title = this.myTitle;    
        $("#tooltip").remove();     //移除 
    }).mousemove(function(e){
        $("#tooltip")
            .css({
                "top": (e.pageY+y) + "px",
                "left":  (e.pageX+x)  + "px"
            });
    });
})

</script>
原文地址:https://www.cnblogs.com/cimuly/p/7117759.html