超级简单的 AngularJS 应用 —— 实时创建 vCard

简介

在这个例子中,我引用了包括AngularJS在内的一些JavaScript库,实现了一个很简单的名片生成器。 尽管在这个小应用中,AngularJS库相较于其他JavaScript库来说做的事不多,然而,这个小而强大的AngularJS却是该应用的全部灵感之源。

背景

在该应用中,我们需要做些简单工作。首先,我们需要用CSS设计名片。然后,我们需要让用户实时的输入和编辑数据,这个地方AngularJS就不可或缺了。再然后,我们需要将名片的HTML div容器转化为canvas画布,并以PNG图片形式下载即可。就这么简单!

不怕麻烦
不怕麻烦
翻译于 3年前
1人顶
顶 翻译得不错哦!
代码的使用

这里,我来解释下下面的代码块。

<!DOCTYPE html>
<html>
<head>
    <title>vCard Creator demo</title>
    <link rel="stylesheet" type="text/css" href="main.css">
</head>
<body>

<div id="wrapper" ng-app>
    <h1>Real time vCard Creator</h1>
<div id="editor">
    <input placeholder="Company name" ng-model="cname"/>
    <input placeholder="Company tag line" ng-model="tagline"/>
    <input placeholder="Your full name" ng-model="name"/>
    <input placeholder="Your designation" ng-model="desig"/>
    <input placeholder="Phone number" ng-model="phone"/>
    <input placeholder="Email address" ng-model="email"/>
    <input placeholder="Website url" ng-model="url"/>
    <button id="saveBut">Download vCard as PNG</button>

</div>

<div id="card">

    <header>
        <h4>{{cname}}</h4>
        <p>{{tagline}}</p>
    </header>
    <div id="theBody">
        <div id="theLeft">
            <h2>{{name}}</h2>
            <h5>{{desig}}</h5>
        </div>
        <div id="theRight">
            <p>{{phone}}</p>
            <p>{{email}}</p>
            <p>{{url}}</p>
        </div>
    </div>    

</div>

</div>

<script type="text/javascript" src="angular.min.js"></script>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="html2canvas.js"></script>
<script type="text/javascript" src="canvas2image.js"></script>
<script type="text/javascript" src="base64.com"></script>

</body>
</html>

这个是该应用的HTML结构。本结构包括了两部分。一个是id为editor的div,一个是id为card的div。前一个用于让用户输入信息,后一个的作用是用来在名片上显示信息。 这俩div又被一个id为wrapper的div给包裹起来。这个id为wrapper的div里面,我们会添加 ng-app属性,因为就是在这个div容器里,我们就要使用angular了。我们可以添加ng-app到HTML的标签里,这样一来,我们就能在该网页的任何地方使用angular了。 下一步,我们创建一些输入框来接收用户的输入信息。确保每个输入框都有ng-model 这么个属性,用于传递输入框里相应的值。我们把ng-model属性放在这里,主要是因为我们想要实时的更新id为card的div里的值。现在,在id为card的div内部,确保我们已经放置了一些卖相古怪的双括弧,并且在双括弧里我们放了来自ng-model的值。 基本上,我们在输入框中输入内容后,双括弧里的值立马就随之改变了。所以对名片的编辑到此结束。我们的目标是,当一个用户点击了下载按钮,当前的名片将被转化为一张图片,并被下载到用户电脑里。

#editor{
    width:350px;
    background: silver;
    margin:0 auto;
    margin-top:20px;
    padding-top:10px;
    padding-bottom:10px;
}
input{
    width:90%;
    margin-left:5px;
}
button{
    margin-left:5px;
}
#card{
    width:350px;
    height:200px;
    background:whitesmoke;
    box-shadow: 0 0 2px #323232;
    margin:0 auto;
    margin-top:20px;
}
header{
    background:#323232;
    padding:5px;
}
header h4{
    color:white;
    line-height:0;
    font-family:helvetica;
    margin:7px;
    margin-top:20px;
    text-shadow: 1px 1px black;
    text-transform:uppercase;
}
header p{
    line-height:0;
    color:silver;
    font-size:10px;
    margin:11px;
    margin-bottom:20px;
}
#theBody{
    background:blue;
    width:100%;
    height:auto;
}
#theLeft{
    width:50%;
    float:left;
    text-align:right;
}
#theLeft h2{
    margin-right:10px;
    margin-top:40px;
    font-family:helvetica;
    margin-bottom:0;
    color:#323232;
}
#theLeft h5{
    margin-right:10px;
    font-family:helvetica;
    margin-top:5px;
    line-height:0;
    font-weight: bold;
    color:#323232;
}

#theRight{
    width:50%;
    float:right;
    padding-top:42px;
}
#theRight p{
    line-height:0;
    font-size:12px;
    color:#323232;
    font-family:Calibri;
    margin-left:15px;
}

这是该应用的CSS样式。在这地方我们模拟了一个名片的设计,并创建了让用户输入信息的编辑面板。

<script>
    $(function() { 

    $("#saveBut").click(function() { 

        html2canvas($("#card"), {

            onrendered: function(canvas) {

                theCanvas = canvas;

                Canvas2Image.saveAsPNG(canvas); 

            }
        });
    });
});
</script>

不怕麻烦
不怕麻烦
翻译于 3年前
2人顶
顶 翻译得不错哦!
最后,在HTML页面的body结束标签之前插入这段script脚本。这段脚本的包含了下载按钮对应的事件响应,也就是说 html2canvas 函数的作用是将id为card的div转化为HTML的canvas画布,并在对canvas画布完成渲染之后,以PNG文件的形式保存该canvas画布。添加完了这个script脚本之后,该做的就做完了。

注意事项

这个canvas2image.js脚本代码里默认没有在生成的文件名称结尾使用扩展名.png。所以如果你无法打开图片的时候,请重命名该文件名,在文件名结尾加上.png这个扩展名即可。
文章转载自 开源中国社区 [http://www.oschina.net]

时间: 2024-07-30 15:31:34

超级简单的 AngularJS 应用 —— 实时创建 vCard的相关文章

超级简单

当我在页面中使用ViewState ,通常是用一个属性表示,例如: private int ViewState_UserID { get { return (int) ViewState["UserId"]; } set { ViewState["UserId"] = value; } } 写这样一组代码感觉比较麻烦,如果能像下面这样简单地使用就好了. [ViewStateProperty("UserID")] protected int Vie

91-关于背景图片(超级简单).........

问题描述 关于背景图片(超级简单)......... 问题描述:有一张图片1300 x 200px的图片用做网页背景,怎么样让图片铺满网页?而不是这样呢? 补充:比方网页像素是1366px 要让1300图片的长度变成1366px,而不是自动填,那样图片就不美了 解决方案 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml

网页CSS技巧:闭合浮动元素超级简单的方法

css|浮动|技巧|网页 关于闭合浮动元素(clearing float)的方法现在已经很多了,你还不了解的话去old9的blog看看,有一篇闭合浮动元素. 这些方法我最喜欢就是 使用:after 伪类动态的嵌入一个用于清除浮动的元素,可惜代码量太大了,看着不够简洁.现在我看到有个方法超级简单.赶紧介绍一下. 原理是这样的,外围元素之所以不能很好的延伸,问题出在了overflow上,因为overflow不可见.见W3C的解释:In addition, if the element has any

PHP实例:实现超级简单的MVC结构

下面是一个超级简单的MVC结构实现,甚至连数据源都用了一个内置的固定数组,虽然简单,但其实众多的PHP Framework核心实现的思想应该和这个是差不多的 只不过一些framework提供了更多的方便开发者使用的工具,我也想自己来实现一个PHP的 框架,目前正在着手策划中,也希望自己能够从框架的开发中学习到更多的PHP设计思想和方法. Controller.php include 'Model.php'; include 'View.php'; class Controller {     p

Flex2 发现之旅:Flex2新的实时创建组件实例方法

创建 在Flex1.5中,如果我们要实时创建一个组件实例的话,可以使用createChild()方法.例如,假定以下代码在MyApp.mxml中:    <mx:Script>        import mx.controls.Button;         var stopButton:Button;        function someEventHandler():Void        {            stopButton = Button(form1.createChi

include 指令-超级简单的问题 求帮助 求帮助

问题描述 超级简单的问题 求帮助 求帮助 谢谢大神们 解决方案 你的问题是什么呢 看下你的html还有编码 解决方案二: 解决方案三: 代码看不全,应该是jsp页面有问题,一点一点删代码.你就能看出来是哪行报错了 解决方案四: 编程是一种美德,是促使一个人不断向上发展的一种原动力.

server-数据库超级简单的语句统计,菜鸟求助

问题描述 数据库超级简单的语句统计,菜鸟求助 SQL. server 我想统计某个表中每个月的数据.请问语句怎么写呢? 解决方案 group by 分组就可以, 解决方案二: http://www.cnblogs.com/rainman/archive/2013/05/01/3053703.html 解决方案三: group by分组之后就可以进行查看了 解决方案四: group by分组之后就可以进行查看了 解决方案五: 基本就是group by 你不发表结构,肯定没法给你写SQL语句的 解决

sql-试编写一个简单SQL脚本程序,创建工资表并完成计算实发工资的任务。

问题描述 试编写一个简单SQL脚本程序,创建工资表并完成计算实发工资的任务. 假设有职工工资表:R(职工号,姓名,基本工资,附加工资,房租,水电,应发工资,税款,实发工资)缴纳个人所得税的规定如下:个人收入>5000,税率20%个人收入>2000,税率10%个人收入>800,税率5%个人收入<800,免税工资的计算方法:(1)应发工资=基本工资+附加工资(2)采取分段计算税款的算法,超出5000部分收20%,2000-5000之间部分收10%,以此类推.(3)实发工资=应发工资-税

强大的企业网站模板,带会员管理,更新维护超级简单。

强大的企业网站模板,带会员管理,更新维护超级简单.我在网上整整逛了一星期,找到不少漂亮的企业网站模板,又实用又大气,还带管理后台,嘿嘿,好东西不能一人独享,拿出来给大家! 模板地址:http://www.e000.com/design/site_package.php?s=dark这些模板是卓天网络建站宝盒里的,都带管理后台的,可视化编辑,很方便啊:用宝盒做网站,网站版块可以自己随时改动的,很灵活.模板不是免费的,不过有优惠可以免费送建站宝盒.需要的可以联系我,1284726634