用svg制作富有动态的tooltip_javascript技巧

昨晚看了用svg如何制作富有动态的tooltip,于是今天就心血来潮学着做一下,于是也成功做出来,也明白其中的原理,收获颇多阿!接下来要多去学习svg,这是个好东西。

这其中也注意了一些平时纠结的细节应该怎么去做,比如:

<article>
<section id="sound1">
</section>
<section id="sound2">
</section>
</article>

article标签长度为600px,section 分别是300px,然后设置其为display:inline-block;然后是下面的效果:

本来按常理来说的话,应该是头像水平排列,这是因为display:inline-block;会将article标签和section标签之间空白渲染成空格,空格展位,所以会导致图片不在同一排,解决的办法是给article标签和section标签添加如下的css代码:

article{
width:600px;
margin:200px;
font-size:0;
}
article section{
display:inline-block;
width:300px;
font-size:14px;
position:relative;
}

于是空白去掉了!

另外对于svg的web图像,我们可以对其进行修改,使其图像的样式可进行修改,它的格式大概如下(举一例子):

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="600px" height="300px" viewBox="0 0 600 300" enable-background="new 0 0 600 300" xml:space="preserve">
<polygon points="89.571,6.648 513.333,6.648 590.25,75.342 553.002,215.306 313.065,273.358 300,293.352 288.876,272.71
48.936,215.306 9.75,75.342 "/>
</svg>

于是我们不可能将其引入到html文件里面,如果说有很多这种svg图像,修改起来很麻烦!

于是使用的是ajax来加载这个图片:

html的dom:<svg data-src="bubble1.svg" width="280" height="140"></svg>

// 问题二:对于svg图像我们要如何引入,不可能将整个svg都引入吧,不便于修改编辑
// 技巧二:使用js进行加载

$('svg[data-src]').each(function(index, svg) {
var src = $(svg).data('src'); //data用于获取data-*属性的路径
$.ajax({
url: src,
dataType: 'xml',
success: function(content) {
var doc = content.documentElement;
$(doc).attr({
width: $(svg).attr('width'),
height: $(svg).attr('height')
});
$(svg).after(doc).remove();
}
})
});

还有对于图片的描边动画效果,这里又怎么个好的方法,只针对svg图像:

使用stroke-dasharray(虚线描边,可以不断尝试,使其调至适应大小,完成实现整个描边的效果)stroke-dashoffset(虚线间隔,调至整个svg没有描边的效果),然后使用transition实现这个动画

最终效果(如图,没有在线演示,动画效果出不来,不过下面贴的代码直接复制,再去下载两个svg图片和头像就可以使用)

代码如下:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
<title>toolTip聊天对话框制作</title>
<meta charset="utf-8"/>
<meta name="keywords" content="" />
<meta name="description" content="" />
<script type="text/javascript" src="jquery.js"></script>
<style type="text/css">
h1{
color:red;
font-size:18px;
}
article{
width:600px;
margin:200px;
font-size:0;
}
article section{
/*问题一:对于display:inline-block;会出现两个section无法并排排列,由于使用此属性会将article与section之间的空白处渲染成空格,于是无法并排*/
/*技巧一: 父元素设置 font-size:0;清除空白*/
display:inline-block;
width:300px;
font-size:14px;
position:relative;
}
.text-center{
text-align:center;
}
#sound1,#sound2{
cursor:pointer;
}
#sound1 img,#sound2 img{
width:100px;
height:100px;
border-radius:100%;
}
.sound_1,.sound_2{
position:absolute;
top:-104px;
width:200px;
height:100px;
box-sizing: border-box;
opacity:1;
}
.sound_2{
padding:28px;
}
.sound_1{
padding: 25px 68px 25px 30px;
left: -150px;
top: -134px;
width: 280px;
height: 140px;
}
.sound_1 svg ,.sound_2 svg{
position:absolute;
top:0;
left:0;
}
.sound_1 p,.sound_2 p{
position:relative;
margin:0;
color:#444;
font-size:12px;
}
.sound_1 svg path, .sound_2 svg polygon{
fill:#fff;/*填充的颜色*/
stroke:red;/*描边的颜色*/
stroke-width: 6px;/*边的宽度*/
}
.sound_1 svg #path1 {
transform: scale(0, 0);
transform-origin: center;
opacity: 0;
transition-duration: .3s;
transition-delay: 0;
}
.sound_1 svg #path2 {
transform: scale(0, 0);
transform-origin: center;
opacity: 0;
transition-duration: .3s;
transition-delay: .1s;
}
.sound_1 svg #path3 {
transform: scale(0, 0);
transform-origin: center;
opacity: 0;
transition-duration: .3s;
transition-delay: .2s;
}
.sound_1 svg #path4 {
transform: scale(0, 0);
transform-origin: center;
opacity: 0;
transition-duration: .3s;
transition-delay: .25s;
}
.sound_1 p {
transition: .2s .35s;
opacity: 0;
transform: translate(0, -10px);
}
#sound1:hover .sound_1 svg #path1,#sound1:hover .sound_1 svg #path2,#sound1:hover .sound_1 svg #path3,#sound1:hover .sound_1 svg #path4{
transform: scale(1, 1);
opacity: 1;
transition-delay: 0;
}
#sound1:hover .sound_1 p{
opacity: 1;
transform: translate(0, 0);
}
/*问题三:对于图片的描边动画效果,这里又怎么个好的方法,只针对svg图像*/
/*技巧三:使用stroke-dasharray(虚线描边,可以不断尝试,使其调至适应大小,实现描边的效果)stroke-dashoffset(虚线间隔,调至整个svg没有描边的效果),然后使用transition实现这个动画 */
.sound_2 svg polygon{
stroke-dasharray: 1500;
stroke-dashoffset: 1500;
fill-opacity: 0;
transition: .6s;
}
.sound_2 p {
transition: .4s;
transform: scale(-0.5);
opacity: 0;
transform: translate(0, -10px);
}
#sound2:hover .sound_2 svg polygon{
stroke-dashoffset: 0;
fill-opacity: 1;
}
#sound2:hover .sound_2 p {
transform: scale(0);
opacity: 1;
transform: translate(0, 0);
}
</style>
</head>
<body>

<h1>toolTip聊天对话框制作</h1>

<article>
<section id="sound1">
<div class="text-center"><img src="nan.jpg" /></div>
<p class="text-center">韩国正太</p>
<div class="sound_1">
<svg data-src="bubble1.svg" width="280" height="140"></svg>
<p>听说优衣库的试衣间已全面升级,空间大小扩充一倍,精装修,同时四面都安有镜子,方便无死角录像呢,要去试一下不,美女!</p>
</div>
</section>
<section id="sound2">
<div class="text-center"><img src="nv.jpg" /> </div>
<p class="text-center">优衣库美女</p>
<div class="sound_2">
<svg data-src="bubble2.svg" width="200" height="100"></svg>
<p>听起来就很刺激,那走,帅哥,准备家伙,go!</p>
</div>
</section>
</article>
<script type="text/javascript">
$(document).ready(function() {
// 问题二:对于svg图像我们要如何引入,不可能将整个svg都引入吧,不便于修改编辑
// 技巧二:使用js进行加载
$('svg[data-src]').each(function(index, svg) {
var src = $(svg).data('src'); //data用于获取data-*属性的路径
$.ajax({
url: src,
dataType: 'xml',
success: function(content) {
var doc = content.documentElement;
$(doc).attr({
width: $(svg).attr('width'),
height: $(svg).attr('height')
});
$(svg).after(doc).remove();
}
})
});
})
</script>
</body>
</html>

以上所述就是本文的全部内容了,希望大家能够喜欢。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索tooltip
svg
svg tooltip、javascript tooltip、svg javascript、javascript svg 绘图、javascript操作svg,以便于您获取更多的相关知识。

时间: 2024-09-20 07:27:40

用svg制作富有动态的tooltip_javascript技巧的相关文章

《众妙之门——网站UI设计之道(修订版)》一1.3 制作有效用户界面的实用技巧

1.3 制作有效用户界面的实用技巧 我们已经讨论过什么是用户界面,用户界面应该具备什么样的特点,以及我们可以使用的构建用户界面的工具,现在让我们看一些可以应用在你的网络应用或网站上的实用技术. 1.3.1 使用空白来构建联系 空白指在各种内容元素之间的空白区域,比如标题.正文和按钮.当在不同元素间建立联系时,空白是一个非常重要的工具.通过缩小元素之间的空白,能够把一些相关的项目组成一组.增加这些分组之间的空白能够更加强调这些分组与其他内容之间的联系.使用空白,我们可以分组相关的控件,也可以构建页

photoshop三招快速制作聊天动态文字教程分享

给各位photoshop软件的使用者们来详细的解析分享一下三招快速制作聊天动态文字的教程. 教程分享:   在这篇文章中,阿随君将主要介绍打字机动画和多重影分身动画的做法,虽然它们在PS中也有多种方法来做,但是阿随君这里只分享利用"时间轴"的做法,而弹幕动画这里会从简介绍,大家感兴趣的可以点击链接查看已发布的详细教程.文末,会展示一些其他玩法,如果你喜欢,留言告诉我,或许更新就在不久喽.   PS玩转文字gif No1.打字机动画 Step 1.把文字准备好 做动画前,当然是先把我们的

Word制作个人简历表格的技巧

    本篇关于利用Word制作个人简历表格的技巧 1.尽量使用Tab.圆点的项目符号对齐,尽量不用空格找齐.用表格制作也可以,但是发送word版的时候会很难看. 2.最好按照模版来制作简历.很多人都是自己想当然的制作,这样HR看起来会不容易找到关键信息,要知道看一份简历不会超过30秒. 3.按照简历模版制作可能会出现一些信息没法写进去,比如投IT研发的项目经验,有种解决方法是,如果项目经验很多,再加上技术技能,刚好又搞出一页来. 4.简历两页足矣,中英文无论在内容还是在格式上都必须完全对照,外

使用窗体+Index函数制作Excel动态图表

  使用窗体+Index函数制作Excel动态图表             先睹为快: 动态图表一般是函数公式配合窗体控件来完成的,下面一起制作吧. 材料:一张分月份的销售报表 制作步骤: 1.添加辅表并设置公式 公式: =INDEX(C3:G3,C$9) 2.根据辅助表添加图表 3.添加下拉选择框. 开发工具 - 插入 - 点击组合框,拖放到图表上部. (Excel2010开发工具选项卡添加方法:文件 - 选项 - 自定义功能区 - 选取开发工具,Excel2007在选项窗口的常用里) 4.设

PS如何制作gif动态图片

  PS自带的动画场景制作gif动态图片方法步骤: 首先新建画布,画布大小将作为之后生成动图的图像大小,调整好分辨率.颜色模式以及画布底色,可以选择透明,都是没有问题的.   然后打开我们的素材,分别是一个地球和一双手的图片,再点击一下"移动工具"(也就是左上角那个鼠标形状)   将素材名字对应的标题条拖下来,形成下图所示的状态   把图像拖到我们刚开始新建的那个画布上,调整好位置,按照同样方法将手也拖动进去   稍微修改一下,把黑色背景去掉,并且加上需要的效果,也就是在对应图层上单击

photoshop截取视频制作成动态海报制作教程

给各位photoshop软件的使用者们来详细的解析分享一下截取视频制作成动态海报的制作教程. 教程分享:     第一步,制作工具,迅雷影音和PS.(能拿到GIF的软件有很多这里就不过多介绍了) 一张动态海报主要由GIF和文案(动.静态文案)组成.迅雷影音生成GIF,PS加文案.特效. 适当的修改些细节. 第二步(得到GIF),选择自己喜欢的视频用迅雷影音打开 右击画面会出现对话框先隐藏字幕然 后选择GIF截取出现下面的对话框.   这些属性都很简单,稍微尝试下就能拿到自己满意的GIF. 第三步

Dreamweaver制作网页之图片应用技巧

dreamweaver|技巧|网页 加快图片下载速度 如果网页中有过多的图片,就会影响浏览的速度. Dreamweaver 可以轻松设置预载图片,加快图片下载速度,让站点以最快的速度出现在用户面前. 效果说明:建立文件,先预载图片,使图片预先下载到缓存中,加快图片下载速度. 创作思想:打开 Dreamweaver MX 2004 软件新建页面,再打开标签面板,在[行为]中选择[预先载入图像]选项,加快图片下载速度. 操作步骤 ( 1 )新建文件,操作如图1 所示. ( 2 )保存页面并插入图片.

Dreamweaver制作网页的图片应用技巧

dreamweaver|技巧|网页 加快图片下载速度 如果网页中有过多的图片,就会影响浏览的速度. Dreamweaver 可以轻松设置预载图片,加快图片下载速度,让站点以最快的速度出现在用户面前. 效果说明:建立文件,先预载图片,使图片预先下载到缓存中,加快图片下载速度. 创作思想:打开 Dreamweaver MX 2004 软件新建页面,再打开标签面板,在[行为]中选择[预先载入图像]选项,加快图片下载速度. 操作步骤 ( 1 )新建文件,操作如图1 所示. ( 2 )保存页面并插入图片.

用Dreamweaver MX 2004制作ASP动态网站(投票系统篇)

dreamweaver|动态|投票 投票程序源文件:点击这里下载源文件 一.程序说明及投票系统流程图 总的来说,投票系统可分为3个模块:选票模块,选票处理模块和结果显示模块! 投票系统需要对某一项目的选择做出记录,一般情况下是存放在数据库中然后对投票情况进行统计并显示投票结果. 首先给出选票,即供投票者选择的窗体对象,当投票者按下投票按钮后,选票处理模块开始激活,对传送到服务器的数据作相应的处理,服务器端在处理时先判断用户选择的是那一项,然后把相应字段的值加1.实际上保存投票结果的数据库中的表只