利用Angular.js从PHP读取后台数据

最后更新于:2022-04-01 10:29:15

之前已经有很多方法可以通过angular进行本地数据的读取。以前的例子中,大多数情况都是将数据存放到模块的$scope变量中,或者直接利用ng-init定义初始化的数据。但是这些方法都只为了演示其他功能的效果。这次来学习一下如何将Angular和PHP相结合,从后台读取数据。 首先,利用PHP,我们定义了一组后台数据,代码如下(test.php): ~~~ <?php header("Access-Control-Allow-Origin: *"); header("Content-Type: application/json; charset=UTF-8"); $conn = new mysqli("myServer", "myUser", "myPassword", "Northwind"); $result = $conn->query("SELECT CompanyName, City, Country FROM Customers"); $outp = ""; while($rs = $result->fetch_array(MYSQLI_ASSOC)) { if ($outp != "") {$outp .= ",";} $outp .= '{"Name":"' . $rs["CompanyName"] . '",'; $outp .= '"City":"' . $rs["City"] . '",'; $outp .= '"Country":"'. $rs["Country"] . '"}'; } $outp ='{"records":['.$outp.']}'; $conn->close(); echo($outp); ?> ~~~ 这段代码含义比较简单,连接数据库后,从数据库中利用sql语句选择相应的数据($conn->query("SELECT CompanyName, City,Country FROM Customers"))。之后,利用循环结构,将取出的数据以键值对的形式保存在$outp变量中。 接下来,在js中操作如下: ~~~ <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names"> <td>{{ x.Name }}</td> <td>{{ x.Country }}</td> </tr> </table> </div> <script> var app = angular.module('myApp', []); app.controller('customersCtrl', function($scope, $http) { $http.get("test.php") .success(function (response) {$scope.names = response.records;}); }); </script> ~~~ 这里仍然应用了$http服务进行数据的读取,传入数据文件对应的url路径,成功后返回数据,并绑定到$scope.names变量上。
';

高效利用Angular中内置服务

最后更新于:2022-04-01 10:29:13

AngularJS中为我们提供了众多的内置服务,通过这些内置服务可以轻松的实现一些常用功能。下面对Angular中常用的内置服务进行一下总结。 1.$location服务 $location服务用于返回当前页面的URL地址,示例代码如下: ~~~ var app = angular.module('myApp', []); app.controller('customersCtrl', function($scope, $location) { $scope.myUrl = $location.absUrl(); }); ~~~ 这里为$scope对象定义了myUrl变量,然后利用$location服务读取到了URL地址并存储到myUrl中。 2..$http服务 $http 是 AngularJS 中最常用的服务,它经常用于服务器的数据传输。下面的例子中服务向服务器发送请求,应用响应服务器传送过来的数据。 ~~~ var app = angular.module('myApp', []); app.controller('myCtrl', function($scope, $http) { $http.get("welcome.htm").then(function (response) { $scope.myWelcome = response.data; }); }); ~~~ 3.$timeout()服务和$interval()服务 这两个服务的功能对应的是javascript中的setTimeout()和setTimeInterval函数。一个简单的实时更新时间例子如下: ~~~ app.controller('myCtrl', function($scope, $interval) { $scope.theTime = new Date().toLocaleTimeString(); $interval(function () { $scope.theTime = new Date().toLocaleTimeString(); }, 1000); }); ~~~ 除了Angular中提供的内置服务外,我们也可以自己定义服务,利用service即可,下面是一个定义服务的基本代码框架: ~~~ app.service('hexafy', function() { this.myFunc = function (x) { return x.toString(16); } }); ~~~ 定义好服务后,我们可以像使用内置的Angular服务一样使用它: ~~~ app.controller('myCtrl', function($scope, hexafy) { $scope.hex = hexafy.myFunc(255); }); ~~~
';

实践中学习AngularJS中的表单

最后更新于:2022-04-01 10:29:10

表单是最常用的一种组建。在Angular.js中,其实并没有单独的为表单添加多少特殊功能。但是,利用Angular.js框架本身的特点,可以更友好的呈现表单。下面将介绍几种常用的功能在Angular中是如何巧妙实现的。 1.根据输入域数据实时更新输出数据 下面代吗实现了一个简易的计算表单,它能将用户输入的数据进行处理,并且实时显示在表单输出域中: ~~~ <div ng-app="" ng-init="quantity=1;price=5"> 数量: <input type="number" ng-model="quantity"> 价格: <input type="number" ng-model="price"> <p><b>总价:</b> {{ quantity * price }}</p> </div> ~~~ 通过定义两个ng-model,将用户输入的数据进行实时监听,并且利用{{}}进行数据的调用,拥几行代码就完成了一个建议的计算表单功能。 2.实现表单重置功能 下面的代码实现了一个表单中经常使用的功能:重置表单。 HTML代码: ~~~ <div ng-app="myApp" ng-controller="formCtrl"> <form> First Name:<br> <input type="text" ng-model="user.firstName"><br> Last Name:<br> <input type="text" ng-model="user.lastName"> <br><br> <button ng-click="reset()">RESET</button> </form> <p>form = {{user}}</p> </div> ~~~ JS代码: ~~~ var app = angular.module('myApp', []); app.controller('formCtrl', function($scope) { $scope.master = {firstName: "John", lastName: "Doe"}; $scope.reset = function() { $scope.user = angular.copy($scope.master); }; $scope.reset(); }); ~~~ 在JS控制器代码中,我们定义了master对象,用来存放初始时刻表单输入框的值。我们定义了一个reset()方法,该方法执行后,利用angular.copy方法,将master中的值赋值给user,利用这样的方法实现了表单域的重置。在HTML代码中,我们使用ng-click鼠标点击事件触发reset()函数,从而实现我们的功能。 3.实现表单下拉菜单选择域功能 在Angular中,实现下拉菜单很简单。我们可以利用ng-repeat指令来方便的实现一个下拉菜单: 首先,在js的模型中定义数据,数据格式如下: ~~~ var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { $scope.names = ["Google", "Runoob", "Taobao"]; }); ~~~ 然后,我们在html中,利用ng-repeat进行模型中数据的读取(具体含义见之前博客) ~~~ <div ng-app="myApp" ng-controller="myCtrl"> <select ng-model="selectedName" ng-options="x for x in names"> </select> </div> ~~~ 关于下拉菜单,还涉及到从数据库、远程等读取数据,此外还有其他方法实现下拉菜单。这些将在之后进行讨论。
';

Angular.js中的指令——易懂全解析

最后更新于:2022-04-01 10:29:08

~~~ <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">angular.js中,指令是最基础的也是最重要的工具之一。angular.js指令指的是以ng为前缀的HTML属性。在之前的ng-app、ng-model等,都属于指令。</span> ~~~ angular.js中的基本指令包括如下内容: 1.ng-app/ng-model ng-app指令用于声明angular,js的作用范围,ng-model用于声明模型。这些在之前都已经进行过详细介绍。 2.ng-init 这个指令用于进行模块的初始化,一个最简单的使用方法是利用这个指令进行数据初始化,代码如下: ~~~ <div ng-app="" ng-init="cost=5"> <p>单价: {{ cost }}</p> </div> ~~~ 上述代码中,利用ng-init初始化了cost变量的值,在之后利用{{}}(angular中的数据绑定方式之一)进行调用。但是这种数据初始化的方式并不推荐。 3.ng-bind 这个指令可以用来进行数据绑定,它的功能就和我们之前提到的{{}}作用相同。在如下代码中,我们不用{{}}方式,而改用ng-bind指令进行数据绑定,代码如下: ~~~ <div ng-app="" ng-init="cost=5"> <p>单价: <span ng-bind= "cost"></span></p> </div> ~~~ 4.ng-repear ng-repeat指令用于进行反复输出,一般用于对数组的遍历,示例代码如下: ~~~ <div ng-app="" ng-init="names=[ {name:'Jani',country:'Norway'}, {name:'Hege',country:'Sweden'}, {name:'Kai',country:'Denmark'}]"> <p>循环对象:</p> <ul> <li ng-repeat="x in names"> {{ x.name + ', ' + x.country }} </li> </ul> </div> ~~~ 这里对names内的所有徐对象进行遍历,并分别按照规定的模板进行输出,类似于php中的foreach语句。x in names表示将names数组中的每一个对象都赋值给x,然后输出,没循环一次进行一次这个操作,直到将数组遍历结束。 以上给出的都是AngularJS中自己预先定义的指令。我们在angular.js中还可以自己进行指令的定义,需要使用directive方法。一个简单的指令定义代码如下: ~~~ var app = angular.module("myApp", []); app.directive("hello", function() { return { template : "<h1>自定义指令!</h1>"//tempate指定该指令渲染的模板 }; }); ~~~ 上面的代码中我们定义了一个hello指令,template定义了该指令的模板,即我们使用这个指令时,需要在html中呈现出什么样的内容。定义好指令后,就可以像之前一样进行调用了。 上面对指令的调用只给出了作为html属性的调用方式。其实angular.js中提供了四种进行指令调用的方法。它们分别为元素名调用、属性调用、类名调用和注释调用。它们的形式如下(按顺序): ~~~ <runoob-directive>runoob-directive>   ~~~ ~~~ <div runoob-directive>div>   ~~~ ~~~ <div class="runoob-directive">div>   ~~~ angular中,为了更清楚的表示这四种调用,每个调用都为其设定了一个英文字母的标识,用于在指令定义时限定它们的被调用方式,分别为: E 只限元素名使用 A 只限属性使用 C 只限类名使用 M 只限注释使用 下面的例子说明了如何在定义指令时使用这些限制: ~~~ var app = angular.module("myApp", []); app.directive("runoobDirective", function() { return { restrict : "A", template : "<h1>自定义指令!</h1>" }; }); ~~~ 当然,这些标识也可以放在一起使用,默认的restrict为EA,表示可以元素名调用或者属性调用。
';

CSS定位中的必须深究的常用技法

最后更新于:2022-04-01 10:29:06

~~~ <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">关于CSS定位,有人很多时候都是随便用用,符合自己的要求就行。但是CSS中的position等属性确实有很多需要认真考究的地方。</span> ~~~ 1.position:static static属性是position的默认值,也就是说,当一个元素没有为其设定position属性时,它的默认值就是static。 2.position:absolute 这是一个经常会被用到的position属性值。如果为某个元素设定了absolute,则该元素脱离原来的文档流。形象一些说,比如a元素被定义了position:absolute,那么这个元素就不会与这个页面中的其他元素发生位置上的关系,而是凌驾于整个页面之上的漂浮状态。页面中的其他元素的位置变化、大小变化等,都不会影响a元素的位置,相当于一个局外人。 3.position:relative relative是最有用的定义方法。设置了relative属性表示,该元素相对于自己原来位置发生的变化。比如,我们定义了一个b元素,给它设定如下css样式: ~~~ #b{ position: relative; width:100px; height:100px; top:100px; } ~~~ 该段代码定义的b元素,它的位置为相对于没有定义position属性的位置向下移动100px的距离。relative属性值的定义就是这样的定位模式。 4.position:fixed fixed定位用的不多,但是它非常适用于固定模式的部分制作,比如顶部菜单。定义了fixed属性后,元素的位置不会随着任何行为发生变化。 5.relative+position 同时使用这两个定位,是一种很常用的手法,新手也可能会在此处遇见很多麻烦。总体来说,如果一个元素绝对定位后,其参照物是以离自身最近元素是否设置了相对定位,如果有设置将以离自己最近元素定位,如果没有将往其祖先元素寻找相对定位元素,一直找到html为止。比如,下面的代码利用二者的结合实现了一个两列布局; ~~~ <span style="white-space:pre"> </span>#div-1 { position:relative; } #div-1a { position:absolute; top:0; right:0; width:200px; } #div-1b { position:absolute; top:0; left:0; width:200px; } ~~~ 内部的两个子div会根据其外部定位为relative的元素为参照进行绝对定位。 6.clear:both清除浮动 有的时候定位会出现塌陷现象,即子元素在父元素中,但是父元素的大小不会随着子元素的大小而被“”撑开“,导致了父元素的塌陷效果。这种bug的出现是由于子元素设定了 float属性,导致父元素的坍塌。要想解决这种bug,需要为父元素设定清除浮动。示例代码如下: ~~~ <span style="white-space:pre"> </span> #div-1a { float:left; width:190px; } #div-1b { float:left; width:190px; } #div-1c { clear:both; } ~~~
';

HTML5开发移动web应用—JQuery Mobile(4)-事件

最后更新于:2022-04-01 10:29:03

Jquery Mobile中提供了丰富的事件处理和检测机制。 1.滚动事件 在Jquery Mobile中,使用scrollStart和scrollStop事件来监听用户开始滚动和停止滚动的事件。以scrollStart为例,使用代码如下: ~~~ $(document).on("scrollstart",function(){ alert("开始滚动!"); }); ~~~ 2.界面相关的事件 一个页面从激活到加载完毕,在jquery mobile中共被分为四个部分的事件,它们分别是: Page Initialization - 在页面创建前,当页面创建时,以及在页面初始化之后 Page Load/Unload - 当外部页面加载时、卸载时或遭遇失败时 Page Transition - 在页面过渡之前和之后 Page Change - 当页面被更改,或遭遇失败时 其中,在页面初始化的部分,jquery mobile又将其分为页面创建前(pagebeforecreate)/页面创建(pagecreate)/页面初始化(pageinit)这三个阶段,在每个阶段中都可以执行相应的动作,示例代码如下: ~~~ $(document).on("pagebeforecreate",function(event){ alert(" pagebeforecreate "); }); $(document).on("pagecreate",function(event){ alert(" pagecreate "); }); $(document).on("pageinit",function(event){ alert(" pageinit ") }); ~~~ 3.关于设备方向 下面是来自w3cschool的实例代码,可以监听设备方向的变化,并在设备方向变化后设置不同的样式; ~~~ $(window).on("orientationchange",function(){ if(window.orientation == 0) // Portrait { $("p").css({"background-color":"yellow","font-size":"300%"}); } else // Landscape { $("p").css({"background-color":"pink","font-size":"200%"}); } }); ~~~
';

Angular.js回顾+学习笔记(1)【ng-app和ng-model】

最后更新于:2022-04-01 10:29:01

Angular.js中index.html简单结构: ~~~ <!doctype html> <html ng-app> <head> <script src="http://code.angularjs.org/angular-1.0.1.min.js"></script> </head> <body> Your name: <input type="text" ng-model="yourname" placeholder="World"> <hr> Hello {{yourname || 'World'}}! </body> </html> ~~~ ng-app属性是angular.js的标志语句,它标记了angular.js的作用域。ng-app可以添加在很多地方,像上面那样添加到html标签上,说明angular脚本对整个页面都起作用。也可以在局部添加ng-app属性,比如在某一个div内添加ng-app,则表明接下来的整个div区域使用angular脚本解析,而其他位置则不适用angular脚本解析。 ng-model表示建立一个数据模型。这里在input输入姓名的输入框内,我们把该定义了一个yourname数据模型。定义了该模型后,我们可以在下面进行调用,方法是利用{{}}。这样就完成了数据绑定,当我们在输入框内输入内容时,会同步到下面的Hello语句块中。 ng-model定义的数据模型不仅可以用于上述场景,还能在许多情况下得到广泛应用。 1、设置filter,实现搜索功能 在下面的代码中,我们利用一个简单的数据模型定义+filter就可以完成一个列表搜索功能。(这是中文网上的实例代码,先不需要管不清楚的部分) ~~~ <div class="container-fluid"> <div class="row-fluid"> <div class="span2"> Search: <input ng-model="query"> </div> <div class="span10"> <ul class="phones"> <li ng-repeat="phone in phones | filter:query"> {{phone.name}} <p>{{phone.snippet}}</p> </li> </ul> </div> </div> </div> ~~~ 上述代码中,为搜索框的input标签绑定了数据模型query。这样,用户输入的信息会被同步到query数据模型中。在下面的li中,使用filter:query就可以实现列表中的数据过滤功能,按照用户的输入信息进行filter过滤。 2、设置orderBy,实现列表排序功能 在下面的代码中,与filter同理,使用orderBy为列表添加一个排序功能: ~~~ Search: <input ng-model="query"> Sort by: <select ng-model="orderProp"> <option value="name">Alphabetical</option> <option value="age">Newest</option> </select> <ul class="phones"> <li ng-repeat="phone in phones | filter:query | orderBy:orderProp"> {{phone.name}} <p>{{phone.snippet}}</p> </li> </ul> ~~~
';

HTML5开发移动web应用—JQuery Mobile(3)-列表

最后更新于:2022-04-01 10:28:59

Jquery Mobile中提供了制作列表的组建,它的data-view为listview。下面是一个典型的Jquery Mobile列表,代码如下: ~~~ <div data-role="page"id="pageone">    <div data-role="content">      <h2>有序列表:h2>      <ol data-role="listview">        <li>a href="#">列表项a>li>        <li>a href="#">列表项a>li>        <li>a href="#">列表项a>li>      <ol>      <h2>无序列表:h2>      <ul data-role="listview">        <li>a href="#">列表项a>li>        <li>a href="#">列表项a>li>        <li>a href="#">列表项a>li>      <ul>    <div>   <div>   ~~~ 上面我们定义了两种类型的列表,一个是有序列表(ul),另一个是无序列表(ol)。这两种列表的定义和HTML相同,只要在相应的标签中添加data-role="listview"属性即可。 在这些最基本的功能之上,我们可以继续添加Jquery Mobile中为我们提供定制好的样式或者功能。下面的代码中我们利用data-inset属性为列表添加圆角和外边距: ~~~ <ul data-role="listview"data-inset="true">   ~~~ 我们经常看到一种列表,它们对内容进行了分组,即相同列表的选项放在同一个大标题下。Jquery Mobile中也为我们提供了实现这种功能的简单组建,list-divider: ~~~ <ul data-role="listview">    <li data-role="list-divider">欧洲li>    <li>a href="#">法国a>li>    <li>a href="#">德国a>li>   <ul>   ~~~ 可以设定自动排序,比如所有的都是字母通过autodividers可以自动按首字母排序,代码如下: ~~~ <ul data-role="listview"data-autodividers="true">    <li>a href="#">Adama>li>    <li>a href="#">Angelaa>li>    <li>a href="#">Billa>li>    <li>a href="#">Calvina>li>     ...   ul>   ~~~ 如果我们想为列表添加搜索功能,可以将data-filter属性设置为true,这样列表就会自动根据用户输入的信息显示删选后的结果。与此配套的data-filter-placeholder可以设定搜索框默认占位符: ~~~ <ul data-role="listview"data-filter="true" data-filter-placeholder="搜索姓名">   ~~~ 在jquery Mobile中,我们为列表添加图片的时候,图片会自动适应列表的大小,变成80*80像素,代码如下: ~~~ 1. <ul data-role="listview">   2.  <li>a href="#">img src="chrome.png">a>li>   3. <ul>   ~~~ 如果想想使用16*16px的小图标,在img的class上添加ui-li-icon即可: ~~~ <li>a href="#">imgsrcimgsrc="us.png" alt="USA"class="ui-li-icon">USAa>li>   ~~~ 最后,现在手机上比较流行的列表数量提示效果,也可以通过Jquery Mobile实现,代码如下: ~~~ <ul data-role="listview">    <li>a href="#">Inboxspanclassspanclass="ui-li-count">335span>a>li>    <li>a href="#">Sentspanclassspanclass="ui-li-count">123span>a>li>    <li>a href="#">Trashspanclassspanclass="ui-li-count">7span>a>li>   <ul>   ~~~
';

前端素材解析—利用linear制作复杂的边框效果

最后更新于:2022-04-01 10:28:56

在网上看到一种利用linear-gradient属性制作绚丽边框效果的方法。首先给出代码,大家可以在自己的电脑中查看效果: ~~~ <html lang="en" xmlns="http://www.w3.org/1999/xhtml">   <head>       <meta charset="utf-8" />       <title>title>       <style>           .box {               margin: 80px 30px;               width: 200px;               height: 200px;               position: relative;               background: #fff;               float: left;           }               .box:before {                   content: '';                   z-index: -1;                   position: absolute;                   width: 220px;                   height: 220px;                   top: -10px;                   left: -10px;               }           .first:before {               background-image: linear-gradient(90deg, yellow, gold);           }           .second:before {               background-image: linear-gradient(0deg, orange, red);           }           .third:before {               background-image: repeating-linear-gradient(-45deg,#cc2a2d,#cc2a2d 30px,#f2f2f2 30px,#f2f2f2 40px,#0e71bb 40px,#0e71bb 70px,#f2f2f2 70px,#f2f2f2 80px);           }       <style>   <head>   <body>       <div class="box first">div>       <div class="box second">div>       <div class="box third">div>   <body>   <html>   ~~~ 有代码可以看出,其实我们并没有使用border,那么这种边框效果是怎么实现的呢? 总体思路是,我们先定义一个白色的div,在定义一个白色方块大一圈的带颜色的div。两个重叠一下,并且让白色的div覆盖彩色div,就实现了边框的效果。 这里面用到的css知识点很多。 1、:before伪类 通过上面的代码我们看出,其实我们在定义的白色div中定义了一个:before伪类,把彩色方块所有的样式都放在了这里。这是因为使用:before定义可以使得定位更加方便,只要调整top和left为边框的宽度就可以了。同时也是的二者成为一个整体。 2、linear-gradient 现在很多浏览器都支持这个css方法。该方法有以下三种使用模式: ①background:linear-gradient(top,#fff,#000) 这段代码的意思是,从上部开始为白色,到底部为黑色进行过度。 ②background:linear-gradient(top,right,#fff,#000) 这段代码关于位置传递了两个参数,top和right,表示从右上放开始,到左下方变化,其他道理与第一个相同。 ③background:linear-gradient(30deg,#fff,#000) 这段代码的第一个参数传递的是角度,其实道理和位置是一样的,只是不是从标准的位置开始变化了。那么角度和位置的对应关系是什么呢?根据实验,0度对应bottom,90度对应left,180度对应top,360度对应right。 以上就是利用linear方法实现绚丽边框的代码和解释,大家可以在本地进行实现,以此发现更多新奇的组合实现方法。
';

HTML5本地数据库详解

最后更新于:2022-04-01 10:28:54

对于复杂的数据库,HTML5使用本地数据库进行操作。这是一个浏览器端的数据库。在本地数据库中我们可以直接利用JavaScript创建数据库,并利用SQL语句执行相关的数据库操作。下面分别介绍本地数据库的各个API及其使用方法。 1、利用openDatabase创建数据库 我们可以利用openDatabase方法创建数据库。openDatabase方法传递五个参数,分别是:数据库名、数据库版本号(可省略)、对数据库的描述、设置分配的数据库的大小、回调函数。 如果我们要创建一个本地数据库,可以执行如下代码: ~~~ var myWebDatabase = openDatabase(“user”, ”1.0”, “user info”, 1024*1024, function(){});   ~~~ 这样就创建了一个用户信息表。之后可以对创建的本地数据库是否成功进行验证: ~~~ if(!dataBase){   alert(“The database has been created successfully!”);   }else{   alert(“The database has not been successfully created.”)   }if(!dataBase){   alert(“The database has been created successfully!”);   }else{   alert(“The database has not been successfully created.”)   }   ~~~ 2、利用executeSql方法执行sql语句 使用executeSql方法,我们可以直接执行正常的sql语句,如下: context.executeSql(‘INSERT INTO testTable(id,name) VALUES (1,”Martin”)’); 当然,这里只体现了executeSql的功能,并没有确切说明executeSql方法怎么用,用在哪里。要想使用该方法就必须介绍transaction。 3、利用transaction处理事务、 该方法用来处理事务,可以传递三个参数:包含事务内容的一个方法、执行成功的回调函数、执行失败的回调函数(后两者可以省略)。 结合transaction和executeSql,我们就可在我们之前创建的数据库中添加创建数据表并添加数据了,代码如下: ~~~ myWebDatabase.transaction(function (context) {              context.executeSql('CREATE TABLE IF NOT EXISTS testTable (id unique, name)');              context.executeSql('INSERT INTO testTable (id, name) VALUES (0, "Byron")');              context.executeSql('INSERT INTO testTable (id, name) VALUES (1, "Casper")');              context.executeSql('INSERT INTO testTable (id, name) VALUES (2, "Frank")');            });   ~~~ sql语句的含义不多解释,但从这里已经可以很明白的看出如何在本地数据库中,想在一般数据库中一样创建数据库数据表并添加数据了。
';

HTML5移动开发实战必备知识——本地存储(1)

最后更新于:2022-04-01 10:28:52

本地缓存是HTML5出现的新技术,这个技术的出现使得移动web的开发成为了可能。我们都知道,要想打造一个高性能的移动应用,速度是关键。而在HTML5之前,只有cookie能够存储数据,大小只有4kb。这严重限制了应用文件的存储,导致web开发的移动应用程序需要较长的加载时间。有了本地存储,让web移动应用能够更接近原生。 浏览器中,本地存储通过window.localStorage调用。判断浏览器是否支持本地存储的代码如下: ~~~ if(window.localStorage){    alert('This browser supports localStorage');   }else{    alert('This browser does NOT supportlocalStorage');   }   ~~~ 如果我们要将数据存储到本地,最简单的方法就是为window。localStorage添加一个属性并为其赋值。例如我们要存储一个数据name,它的值为Tom,就可以通过如下方式实现: ~~~ window.localStorage.name = “Tom”   ~~~ 这里要注意字符串变量需要引号。当我们想取出本地存储中的数据市,可以利用getItem方法。整个代码流程如下: ~~~ var storage = window.localStorage;   storage.name = “Tom”;   //取出name数据   var name1 = storage.getItem(“name”);   alert(name1);   ~~~ 这段代码在Chrome浏览器控制台中的显示结果就是一个显示Tom的提示框。可见我们已经通过这种方式正确的进行了数据的存储与读取。 如果我们想删除这些存储的数据,可以使用removeItem方法。在以上代码中加入如下代码: ~~~ storage.removeItem(“name”);   ~~~ 这时当我们再次alert的时候将显示null,因为这个数据已经被清空了。
';

HTML5移动开发常用——XML基本知识介绍

最后更新于:2022-04-01 10:28:50

无论是在Sencha Touch还是SAP UI5,都用到了XML这种语言。在Sencha Touch中,它和JSON一样被用来做数据传输;在SAP UI5中,它被用来当做视图模板。接下来我们来深入学习一下XML语言。 网上对XML的概述解释是:XML 是可扩展标记语言(Extensible Markup Language)的缩写,其中的标记(markup)是关键部分。您可以创建内容,然后使用限定标记标记它,从而使每个单词、短语或块成为可识别、可分类的信息。您创建的文件,或文档实例由元素(标记)和内容构成。当从打印输出读取或以电子形式处理文档时,元素能够帮助更好地理解文档。元素的描述性越强,文档各部分越容易识别。自从出现标记至今,带有标记的内容就有一个优势,即在计算机系统缺失时,仍然可以通过标记理解打印出来数据。 我们在XML文档最开始,一般要进行必要的声明: 这是一些基本的配置信息,包括xml的版本、编码方式等。该声明必须出放在XML文件的头部。 在XML中我们可以自定义标签内容,这都跟我们想要创建的东西相关。拿Sencha Touch中的一段代码为例: ~~~ <book>   <id>1id>   <image_url>image/html51.jpgimage_url>   <book_name>HTML5指南book_name>   <author>Tomauthor>   <description>a good bookdescription>   <book>   ~~~ 这段代码,通过book标签,定义了我们要创建的book,里面的每个标签都定义了其所包括的属性。这些标签都是自定义的。其中要注意,标签开始标记和结尾标记单词的拼写要完全一致,包括大小写,否则处理系统会当做两个文件处理。 像HTML中一样,我们可以为自定义的标签设定属性,如: HTML5指南 编辑好的xml文档,其实就是一堆字符串形式的数据。至于我们要怎么使用,是用在视图还是数据,都可以根据我们的需求进行调用。大部分语言都支持xml的统一标准。
';

jquery实现全文检索与鼠标滑过工具栏特效

最后更新于:2022-04-01 10:28:47

1、鼠标滑过工具栏特效 ~~~ <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <title>鼠标移动到div上时出现随鼠标移动的提示框</title> <style> .hover{ width:300px; height:300px; border:2px black solid; } .tooltip{ border:2px black solid; width:100px; height:40px; position:absolute; } </style> <script src="jquery-1.4.1.min.js"></script> <script> $(document).ready(function () { //hover事件 //hover事件第一个函数设定为鼠标移入时执行的效果,第二个函数为移出时 $(".hover").hover(function () { $(".tooltip").fadeIn("slow"); }, function () { $(".tooltip").fadeOut("slow"); }); //接下来设定tooltip随鼠标运动 $('.hover').mousemove(function (e) { var topPosition = e.pageY + 5; var leftPosition = e.pageX + 5; $(".tooltip").css({ 'top': topPosition + 'px', 'left': leftPosition + 'px' }); }); }); </script> </head> <body> <div class="tooltip" style="display:none">This is the tool tip</div> <div class="hover"></div> </body> </html> ~~~ 2、实现全文检索 ~~~ <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <style> .highlight{ background-color:yellow; } </style> <title></title> <script src="jquery-1.4.1.min.js"></script> <script> $(document).ready(function () { $("#search").click(highlight); $("#clear").click(clearSelection); function highlight() { var searchText = $('#text').val(); var regExp = new RegExp(searchText, 'g'); clearSelection(); $('p').each(function () { var html = $(this).html(); var newHtml = html.replace(regExp, '<span class="highlight">' + searchText + '</span>'); $(this).html(newHtml); }); } function clearSelection() { $('p').each(function () { $(this).find('.highlight').each(function () { $(this).replaceWith($(this).html()); }); }); } }); </script> </head> <body> <p> askldjaioshdqknhasd askdjnwqm,ndas egme asldkjwqndmd qlakdjqowied aksjdhjakhsduiqowhndmsanmdnbqwbedmanbdikuj askldjaioshdqknhasd askdjnwqm,ndas awqdfdxcvc,wme asldkjwqndmd qlakdjqowied aksjdhjakhsduiqowhndmsanmdnbqwbedmanbdikuj askldjytijkmh askdjnwqm,ndas awqdkqwer123eqowied aksjdhjakhsduiqowhndmsanmdnbqwbedmanbdikuj askldjaioshdqknhasd askdjnwqm,ndas awqdklnjq,wme asldkjwqndmd qlakdjqowied aksjdhjakdsf vb546yrtghfhyunbdikuj askldjaiwerbgvbtyrtyhngfscxjwqndmd qlakdjqowied aksjdhjakhsduiqowhndmsanmdnbqwbedmanbdikuj tyrgbsd askdjnwqm,ndas awqdkergfdvcksjdhjakhsduiqowhndmsanmdnbqwbedmanbdikuj </p> <input type="search" id="text" /> <input type="button" value="search" id="search" /> <input type="button" value="clear" id="clear" /> </body> </html> ~~~
';

js字符串主要操作方法

最后更新于:2022-04-01 10:28:45

string.indexOf()//返回字符串中第一个与给定子串匹配的子串序号 字符串的IndexOf()方法搜索在该字符串上是否出现了作为参数传递的字符串,如果找到字符串,则返回字符的起始位置 (0表示第一个字符,1表示第二个字符依此类推)如果说没有找到则返回-1  string.lastIndexOf()//同上,从结尾开始 string.match()//在一个字符串匹配一个正则表达式 检索一个字符串或者一个正则表达式 该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。 string.replace()//替换正则表达式或替换字符串 str.replace("原字符串","要替换的字符串") string.split()//把一个字符串分割成一个字符串组 stringObject.split(separator,howmany) separator:从该参数指定的地方分离 howmany:指定返回数组的最大长度、 split()内传入正则表达式,则将字符串按照正则表达式规则进行分割 var words = sentence.split(/\s+/) string.slice(start,end)//生成一个子串 返回string中从start到end这部分的子串
';

HTML5能为我们带来什么

最后更新于:2022-04-01 10:28:43

说起HTML5,表面上是说它是HTML更新的第五个版本,而实际上,HTML5有很多内在的东西。正是因为HTML5的出现,使得web应用的开发变得更加方便快捷,更加标准化,提高了web应用的性能。可以说HTML5是web应用现在能够被广泛接受。 首先我们来看一下HTML5给我们带来了哪些新功能。 • 本地缓存 本地存储Web storage的作用是在网站中把有用的信息存储到本地的计算机或移动设备上,然后根据实际需要从本地读取信息。它提供两种存储类型API接口,分别是sessionStorage和localhostStorage,其中前者在会话期间内有效,后者就存储在本地,并且存储是永久的,但是两个的API使用基本上是相同的。 利用HTML5的本地存储功能,我们可以进行用户信息的保存(类似于HTML4中的cookie)、数据存储与读取等诸多功能。注意Web Storage官方建议每个网站的本地缓存大小为5MB,这相比于HTML4中cookie的几kb要大得多,功能也更强大。 接下来利用代码来具体解释一下Web Storage的使用方式,以localStorage为例,js代码如下: ~~~ window.onload = function(){ localStorage.clear();//清除之前localStorage存储的全部数据 localStorage.setItem(“userData”,”storage demo”)//setItem方法可以设定缓存数据的值,采用键值对的形式 } 除了基本操作,还可以对Storage事件进行监听: window.onload = function(){ window.addEventListener(“storage”,function(e){ console.log(e); },true); } ~~~ • 离线缓存 离线缓存可以在即使没有网络的状态下web应用仍能正常运行,非常有实用价值。HTML5的离线缓存功能为web应用(尤其是移动应用)的开发建立了良好的条件。 开始使用离线缓存功能很简单,只要在html标签中加入mainfest属性,并指定mainfest文件即可。mainfest文件的作用是告诉浏览器哪些文件需要进行离线缓存操作。举例说明.mainfest文件的应用: ~~~ CACHE MAINFEST index.html test.js NETWORK /images/ ~~~ 这些内容就表明,index.html和test.js这两个文件被定义为缓存文件,跟在CACHE MAINFEST后面。当网络不可用或不在线时,此部分文件会通过本地缓存直接读取。NETWORK后面的文件定义为无论这些文件是否已经被缓存,都必须从网络中下载。 除此之外,还要对.mainfest文件进行必要的配置,在web.xml中 ~~~ <mime-mapping>//.mainfest文件是MIME类型文件 <extension>mainfest</extension> <mime-type>text/cache-mainfest<mime-type> </mime-mapping> ~~~ 有了HTML5离线缓存技术,就可以使网站或者web开发的应用在无网络的情况下也可以进行访问,大大减少了网络消耗,也让利用web开发出来的app性能大幅提升了。 • 新型标签 ①布局语义化标签 HTML5新增了许多语义化的布局标签,用以代替之前每个布局都要使用div的无语义性的混乱局面。HTML5提供的新标签包括<head> 、< footer >、< aside >、< article >等,基本一个页面的每个布局部分,都有一个对应的标签。 HTML5语义化标签的主要作用主要体现在以下三个方面: ◎对移动端设备更加友好 ◎使用语义化的布局标签更有利于搜索引擎的的抓取 ◎语义化标签简洁,便于软件的维护和二次开发 使用语义化标签,更加符合现在的web标准。 ②其他标签 HTML5增加了许多新功能,这些功能有的对应标签。 多媒体标签。比如< video >标签可以支持视频播放功能,使用HTML5的video标签配合一些web视频播放器制作插件可以制作出效果很好的网页播放器。这里推荐video.js,比较美观,性能较好,且学习成本比较低。 <canvas>画布,将在后面进行详细介绍。 表单相关的新标签,将在后面进行详细介绍。 • Geolocation地理定位 目前,地理定位基本上是每个移动app都支持的功能。而HTML5也开始支持地理定位功能,这给利用HTML5开发移动app提供了极大帮助。 Geolocation的使用方法很简单,主要有三个方法: getCurrentPosition():获取当前用户的地理位置信息 watchPosition():定期轮询设备的位置 clearWatch():用于停止watchPosition()的轮询 目前大部分浏览器都支持Geolocation API。 • 表单 表单一直都是一个web不可缺少的部分。HTML5中提供了非常丰富的表单标签和属性。首先我们来了解几个HTML5为表单控件新添加的标签。 <meter>/<progress>:用于设置进度条,配合js即可方便的搭建出一个动态进度条。 <details>+<summary>:零js即可创建折叠内容,结构如下: <details> <summary>This is the summary</summary> This contains detail things. <details> 除了新的标签,input标签还增加了许多类型(type),包括search/email/number/type/range/url等。 表单标签的新增属性有placeholder/autofocus/list/autocomplete等。 HTML5极大地丰富了表单内容,让编写代码变得更加简单,实现功能更加快捷。 • canvas 个人认为canvas是HTML5中最强大的功能,有了canvas,HTML5在图像这方面变得无所不能(有关canvas的具体实例请见其他博客)。 canvas可以进行切图、画图、图像的像素级操作等一系列功能,十分强大。说起canvas,应用最多的应该是基于HTML5的游戏。利用HTML5的canvas功能,配合js,可以开发出各种各样的游戏。同时,像素级的操作也让HTML5 canvas可以处理许多细致的图像问题。 创建一个canvas画布很容易,在html中使用<canvas>标签,js代码如下: var canvas = document.getElementById(canvas1); var context = canvas.getContext(“2d”); canvas可以创建丰富的图形,包括基本图形、函数曲线等。具体的使用技巧可以查看http://blog.csdn.net/clh604/article/details/8536059这篇博客。 综上,HTML5提供的新功能,使HTML5在移动应用开发、游戏开发、规范开发等方面,都有了质的飞跃。深入学习HTML5,十分必要。      
';

jQuery插件实战:slider.js/jquery.validate/jRating介绍

最后更新于:2022-04-01 10:28:40

下面给大家介绍三个最近在学也比较实用的jquery插件 1、slider.js slider.js必须创建一个Slider对象实例,建议在第一个单独的.js文件中实例化Slider对象 var slider = new Slider($(‘#sliderContainer’)); 其中#sliderContainer是用来放置图片幻灯片的DIV容器,对应HTML代码: ~~~ <div id=”slideContainer”></div> 使用示例 $(function(){ var slider = new Slider(“#slider”).setDuration(3000); slider.setSize(600,400);//设置大小 slider.fetchJson(‘photos.json’);//从photo.json本地json文件中加载幻灯片图像 var transitions = [‘squaree’,’circles’,’circle’,’diamond’,’verticalSunblind’,’verticalOpen’] //以上定义一个转场数组 setInterval(function(){ var transition = transitions[Math.floor(Math.random()*transitions.length)]; if(SliderTransitionFunctions[transition]) slider.setTransitionFunction(SliderTransitionFunctions[transition]) //设置Canvas转场效果 else slider.setTransition(transition); //设置CSS转场效果 },5555); }); ~~~ photos.json文件一般格式 [ {“src”:”images/pic1.jpg”,”name”:”风景”,”link”:”http://www.baidu.com/”}, ...... ] 2、jquery.validate 使用jquery.validate实现ajax方式的表单 ~~~ $(document).ready(function(e)( $(‘#myform’).ajaxForm(function(){ alert(“success!”); }); )); ~~~ 使用jquery.validate添加客户端验证规则 ~~~ $(document).ready(function(e){ $(“guestform”).validate({ rules:{ ipt_title:{ required:true,    //设置不能为空 maxlength:20,   //设置最大长度 minlength:20,   //设置最小长度 }, ...... } }) }) ~~~ 这里的ipt_title对应html代码中的name属性,如: <input class=”contact” type=”text” name=”ipt_title” value=””/> 3、jRating jRating HTML部分 ~~~ <div class=”example”> <div class=”basic” data-average=”12” data-id=”1”></div> <div class=”basic” data-average=”8” data-id=”2”</div> </div> ~~~ //data-average表示当前评分的比例值,data-id指定当前的行   Js部分 ~~~ $(document).ready(function(){ $(“.basic”).jRating();//最简单的调用形式 $(“.basic”).jRating({ step:true, length:20, onSuccess:function(){ alert(‘success!’); } }); $(“.basic”).jRating({ canRateAgain:true,//是否可以重复评分 nbRates:3//可重复评分的次数 }) }) ~~~ 利用jRating和php搭建一个评分系统 首先创建一个保存评论信息的表 CREATE TABLE IF NOT EXISTS ‘rating’( ‘rating_id’ int(11) NOT NULL AUTO_INCREMENT,//每个评论设定一个自动增长的编号 ‘rating_title’ varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, ‘rating_value’ int(11) NOT NULL,//评分值 ‘rating_content’ varchar(2000) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (‘rating_id’) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT=’评分表’ AUTO_INCREMENT =6; 数据库php配置文件 ~~~ <?php define(‘DB_USER’,’root’); define(‘DB_PWD’,’root’); define(‘DB_CHARSET’,’utf-8’); ...//配置各种信息 ?> ~~~     网络配置文件 ~~~ <?php header(‘Content-Type:text/html’;charset=utf-8’); require_once ‘database.inc.php’;//数据库配置文件 require_once ‘db_mysql.php’;//数据库操作类 $db = new db_mysql();//构建数据库操作对象实例 $db->connect(DB_HOST,DB_PWD,DB_NAME,DB_CHARSET); ?> ~~~   保存表单数据 ~~~ <?php sesstion_start();//打开会话设置 header(‘Content-Type:text/html’;charset=utf-8’); include_once ‘config.inc.php’; include_once ‘common.function.php’; if(isset($_POST[‘ipt_jrating’])){ $record = array( ‘rating_title’ => $_POST[‘ipt_title’], ‘rating_value’ => $_POST[‘ipt_jrating’], ‘rating_content’ => $_POST[‘ipt_content’],  ); $id = $db->insert(‘rating’,$record); if($id){ echo “<script>alert(‘评论成功!’) window.location=’bookdetail.php’;</script>”; } } $rating = getAvgRating();//获取评分平均值 ?> ~~~ 注:include_once和require_once的区别 include表示包含,找不到文件时继续向下执行; require表示必须,找不到文件时停止向下执行 getAvgRating()函数的实现 ~~~ function getAvgrating(){ global $db; $row = $db->getOneRow(“SELECT IFNULL(AVG(rating_value),0) avgrating FROM ‘rating’ WHERE 1”); return $row(“avgrating”); } ~~~   显示评分记录 ~~~ <span>评分:</span> <?php echo $list[‘rating_value’]?>分; ~~~  
';

豆瓣API使用介绍及通过ajax跨域获取url的json数据的方法

最后更新于:2022-04-01 10:28:38

### 一、豆瓣API简介及快速入门: 例如想获取ID为1220562的图书相关信息,则请求如下: http://api.douban.com/v2/book/1220562,返回的为json,其中的信息包括: id;alt/rating(评分)/author/image/title/summary(简介)/attrs(包含一组jason数据,里面有出版社、出版日期、坐等、价格、书名、页数等等一些列信息)/tags   要获取图书的信息,每个url都不同,可以到 [http://developers.douban.com/wiki/?title=book_v2#get_book](http://developers.douban.com/wiki/?title=book_v2#get_book) 查看相关url 使用get方式获取单挑API数据时方法如下: GET https://api.douban.com/v2/book/17604305?fields=id,title,url 便可返回一端json数据 获取图书信息: GET  https://api.douban.com/v2/book/:id 根据ISBN获取信息: GET  [https://api.douban.com/v2/book/isbn/:name](https://api.douban.com/v2/book/isbn/:name) 还有许多可以获取的信,都在豆瓣读书API中,找到对应的url即可 ### 二、通过url读取json数据的方法 1、通过jquery的ajax进行跨域 ~~~ jQuery(document).ready(function(){       $.ajax({          type : "get", //jquey是不支持post方式跨域的          async:false,          url : "http://api.taobao.com/apitools/ajax_props.do", //跨域请求的URL          dataType : "jsonp",          //传递给请求处理程序,用以获得jsonp回调函数名的参数名(默认为:callback)          jsonp: "jsoncallback",          //自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名          jsonpCallback:"success_jsonpCallback",          //成功获取跨域服务器上的json数据后,会动态执行这个callback函数          success : function(json){               alert(json);           }       });   });  ~~~ 2、通过getJson进行跨域读取数据 ~~~ $.getJSON("http://api.taobao.com/apitools/ajax_props.do&jsoncallback=?",     function (data) {         alert(data);     } ); ~~~
';

Jquery Mobile入门笔记

最后更新于:2022-04-01 10:28:36

1、初始化移动浏览显示 <meta name=”viewport” content=”width=device-width,initial-scale=1”/> 2、引入jquery mobile的css文件和js文件  3、HTML5 date=*属性用于通过jquery mobile为移动设备创建交互外观 示例: ~~~ <div date-role = “page”> <div date-role = “header“> <h1>标题</h1> </div> <div role = “main” class=”ui-content”> <p>内容</p> </div> <div data-role = “footer”> <h1>页脚</h1> </div> </div> ~~~ 在一个html文件中可以放多个date-page,但默认显示第一个data-page 可以通过href的形式进行跳转,示例: ~~~ <div date-role = “page” id=”index1”> <a href=”#index1”>页面跳转</a> </div> <div date-role = “page” id=”index2”></div> ~~~ 4、设置页面过度效果data-transition ~~~ <div date-role = “page” id=”index1”> <a href=”#index1” data-transition=”slide”>页面跳转</a> </div> <div date-role = “page” id=”index2”></div> ~~~ 包括:slide/slideup/slidedown/pop/fade/flip/none 5、事件 (1)页面初始化事件:pagebeforecreate,pagecreate,pageinit (2)页面加载事件:pagebeforeload,pageload (3)页面过度事件:pagebeforeshow,pageshow,pagebeforehide,pagehide 示例: ~~~ $(document).on(“pagebeforecreate”,function(){ //do something }) $(document.on(“pagebeforehide”,”#index”,function(){ //do something[index页面消失时] }) ~~~ 6、jquery moblie按钮 示例:<a class=”ui-btn”>按钮</a> <input type=”submit” value=”按钮”/>//JQM直接添加了一些样式 让多个按钮并排显示(ui-btn-inline): <a class=”ui-btn ui-btn-inline”>按钮</a><a class=”ui-btn ui-btn-inline”>按钮</a> 此外还有不同样式:ui-btn-a;ui-btn-b;ui-corner-all;ui-shadow 7、导航栏制作示例: ~~~ <div data-role=”navbar”> <ul> <li><a href=”#” data-icon=”camera”>导航1</a></li> <li><a href=”#” data-icon=”carat-l”>导航2</a></li> <li><a href=”#” data-icon=”carat-2”>导航3</a></li> </ul> </div> ~~~ data-icon可以设置导航图标,还可以自己制定 8、设置标题和当行蓝位置固定 设置data-position=”fixed” 9、列表 ~~~ <ul data-role=”listview data-inset=true”> <li>列表1</li> <li><a href=”#” >列表2</a></li> <li><a href=”#” >列表3</a></li> </ul> ~~~ listview指定列表样式;data-inset设置为true使列表留边距显示 复杂的列表:(详情见api) ~~~ <ul data-role=”listview data-inset=true”> <li><a href=”#” > <h2>G1次</h2> <p>北京-大连</p> <p>大连-北京</p> <p class=”ul-li-aside”>9:00开</p>//设置为右上角显示 </li> </ul> ~~~ 10、表单:直接使用html的默认表单就可以 表单自适应功能:ui-feild-content ~~~ <form> <div class=”ui-feild-content”><input type=”text”/></div> <div class=”ui-feild-content”><input type=”text”/></div> </form> ~~~ 11、表格 ~~~ <table data-role=”table” data-mode=”reflow” class=”ui-responsive table-stroke”> <thead> <tr> <td></td> <td></td> <td></td> </tr> </thead> </table> ~~~
';

前言

最后更新于:2022-04-01 10:28:34

> 原文出处:[前端开发常用技巧经验记录](http://blog.csdn.net/column/details/fareise-conquer-font.html) 作者:[fareise](http://blog.csdn.net/fareise) **本系列文章经作者授权在看云整理发布,未经作者允许,请勿转载!** # 前端开发常用技巧经验记录 > 记录一些前端开发过程中的技巧以及开发过程中的经验,包括HTML,CSS,Javascript,Jquery,Bootstrap等。
';