函数
函数的概念:将一段常用代码进行命名,这个名称就叫“函数”。
函数的步骤:(1)先定义函数,函数定义后不能直接执行,必须调用函数,函数才会执行
(2)调用函数:直接写函数名称,后面直接跟一个小括号,小括号中可以有“实参”
函数语法格式:
function functionName([形参1][,形参2][,形参3])
{
实现一个功能的程序代码;
[return 参数]
}
语法说明:
函数名称的命名同变量一样;
形式参数:定义函数的参数就叫“形式参数”,该参数接受调用函数时传递过来的值;
形式参数的命名,同变量也一样;
形式参数不能是具体的值;比如:function getMax(10,20)是错误的
函数定义了,就必须要调用;
调用函数用时,直接写函数名称,后跟小括号,括号中是“实参”;
实际参数:调用函数时,传递的参数叫“实参”,就是“实际的数据”;
形式参数和实际参数的个数和顺序应保持一致;
Return语句:可以调用函数者返回一个结果;
Return语句执行后,立即结束函数的运行;
如果return语句后面,还有其它程序代码,将不再执行;
因此,return语句放在函数的最后面;
JS中是区分大小写的,但关键字一律小写;对象的方法:today.toLocaleString()
全局变量和局部变量
全局变量:可以在任何地方(函数内部和函数外部)使用的变量,就叫“全局变量”;
一般来说,在函数外部定义的变量,是“全局变量”;
省略关键字var定义的变量,也是“全局变量”,一般情况下不要省略;
局部变量:只能在函数内部使用的变量,叫“局部变量”。
注意:在JS中,在函数外部定义的变量,可以在函数内部使用;但在函数内部定义的变量,只能在函数内部使用。
将函数定义作为数据,赋给其它变量
将函数定义,赋给一个基本数据类型的变量
function showInfo()
{
return “我是一个函数”;
document.write(“我是一个函数”);
}
var a=showInfo; //将函数定义(地址),赋给一个变量,变量a是复合数据类型
document.write(a() );
var b=showInfo(); //将函数的执行结果,赋给一个变量b,变量b是基本数据类型
注意的是:函数名showInfo后不能跟小括号;
如果showInfo后面跟了小括号,就是调用函数,将函数的执行结果,赋给a变量,而不是地址
将函数定义,赋给一个数组元素,那么,该数组元素就是一个函数了;
Var arr=[10,20,30];
arr[1]=showInfo(); //arr[1]的值是“我是一个函数”
arr[2]=showInfo; //arr[2]就变成了函数
document.write( arr[1] );
document.write( arr[2]() ); //既然arr[2]是一个函数,在调用时,一定要写小括号
3)将函数定义,赋给一个对象属性,那么,该对象的属性就是一个函数了;
var obj={
name:“张三”,
age:30,
show:showInfo //将函数定义,赋给了一对象属性
};
obj.show(); //方法和函数的定义是一样的,只是在不同的地方叫法不一样
document.write( obj.name );
基本数据类型和复合数据类型
基本数据类型:是将变量名称和变量的值,都存入“快速内存”“栈内存”;
将基本数据类型的变量,赋给其它变量,是将原来变量的值“复制”一份,放到了新变量中,因此,这两个变量没有任何关系,换句话说:修改其中一个变量的值,另一个变量的值不会改变;
var a=10; //基本数据类型,在赋值是地,是传值
var b=a; //将a的值,复制一份,传给b
a=100; //给变量a重新赋值
document.write(b); //求变量b的值,是否会改变
引用数据类型(复合数据类型):它的存储分两个部分,一是把数据存到“慢内存”“堆内存”,二是将变量名称和数据地址存到“快速内存”“栈内存”。
换句话说:就是新变量和旧变量,同时指向了同一个数据地址,只是变量名称不一样。
var arr1=[1,10,20,30];
var arr1=new Array(1,10,20,30);
var arr2=arr1; //将arr1赋给了arr2,其实,这里传的数据地址,并不是具体的数据
arr1[0]=100; //对arr1中的第1个元素,重新赋值
document.write( arr2[0] );
补充知识点:for in循环
For ……in主要是循环或遍历,数组元素或对象的属性。
注意:如果遍历数组的话,未定义的数组元素,不会输出;只会输出有效数据。
语法结构:
for(index in arr)
{
document.write( arr[index] );
}
参数说明:
arr代表一个数组;
index代表一个数组元素的下标;
举例:
var arr=[1,2,,,,,3,,,,,,,,,,,,,,,,,4];
遍历对象属性
for(name in window)
{
document.write( name );
}
参数说明:
Name就是遍历对象,返回的属性名称;
Window是一个窗口,代表当前浏览器窗口,比如:document、 history、screen、 navigator等
一个函数对应一个函数对象。
arguments属性:函数对象的一个数组对象属性,包含了所有接收到的参数;
arguments.length:取得所有接收到的参数的个数
arguments是在函数内部来使用;
3.对象
对象是一组属性和方法的集合。
JS中的对象分类:
自定义对象:自己根据需要定义自己的对象;var obj={}
JS内置对象:
String:字符串对象,提供字符串操作的属性和方法。比如:length
Array:数组对象,提供数组操作的属性和方法。比如:length
Date:日期时间对象,提供访问系统时间日期的信息。比如:getDay()、toLocaleString()
Math:数学对象,提供数学处理的方法。比如:Math.floor()、Math.ceil()、Math.round()
Number:数字对象。比如:toFixed()
Function:函数对象。比如:arguments数组对象
Event:事件对象。比如:onMouseOver、onMouseOut、onClick、onLoad
正则对象:正则表达式,对数据进行更严格的验证。(就业班讲)
BOM和DOM对象(核心)
BOM提供了访问和操作浏览器各组件的途径;
DOM提供了访问和操作网页中各HTML元素的途径
对象就是一组属性和方法的集合。
一、创建自定义对象
(1)使用new关键字和Object()来创建一个空对象,然后添加属性和方法
方法就是函数,在对象中的函数,就叫“方法”。
Var obj=new Object();
obj.name=“张三”; //增加一个属性,并赋值
obj.sex=“男”;
obj.age=30;
obj.isMarried=true;
obj.school=null;
obj.showInfo=function(){
var str=this.name+“的基本资料”;
str +=“<br>姓名:”+this.name;
}
onload:当网页加载完成,去执行JS程序代码。
当网页的中所有HTML标记都加载完成后,才会触发onLoad事件;
触发onLoad事件后,会去调用相应的JS程序。
只要<body>中有一个HTML标记没有显示出来,onLoad就不会发生
<body>……</body>……onload事件……调用JS函数——document.write
(2)使用{}来创建对象
Var obj={
name:“张三”,
sex:true
}
一个字符串的变量,就是一个String对象。
一、创建String对象的方法
1)使用new关键字和String()构造函数来创建(不常用)
var strObj=new String(“Welcome”);
var len=strObj.length; //获得字符串的长度
定义一个字符串变量,就对应一个String对象(最常用)
var str=“重蔚自留地”;
var len=str.length;
二、String对象的属性和方法
length:获得字符串的长度,var len=str.length
注意:JS的length是指字符个数,并不是按字节来计算。
charAt(index):返回指定位置的一个字符。
提示:String中的下标与Array中的下标一样。
index:表示指定位置的下标(索引号)
举例:
var str=“Welcome”;
var str1=str.charAt(str.length-1) //取得最后一个字符
indexOf(substr[,startIndex]):
描述:从原字符串中,查找子字符串,如果找到,返回起点索引号;如果未找到,返回-1。
参数:
substr:子字符串
startIndex:开始查找的位置索引号。如果省略,则从0开始查找。
lastIndexOf(substr[,startIndex])
描述:在原字符串中,从右往左搜索子字符串,如果没有找到,则返回-1。
参数:同indeOf()方法一样
substr(startIndex[,length])
描述:返回一个子字符串。
参数:
startIndex:开始索引号
length:返回几个字符。如果length省略,返回到结束的所有字符。
举例:
var str=“welcome”;
var str2=str.substr(3,2); // str2=co
substring(startIndex[,endIndex])
描述:返回索引号从startIndex到索引号endIndex之间的一个子字符串。
参数:
startIndex:开始索引号
endIndex:结束索引号,如果省略,返回到结尾的所有字符。
split(separator)
描述:将一个字符串,用指定分割符separator分成一个数组。
参数:separator就是一个分割符
举例:
Var str=“星期一,星期二,星期三”;
Var arr=str.split(“,”);
search(substr)
描述:查找指定的子字符串,如果没有找到,返回-1
replace(substr,replacement)
描述:在原始字符串中,将一个指定的子字符串,替换成指定的内容。
参数:
Substr:要查找的内容
Replacement:要替换的内容
注意:如果不使用“正则表达式”,则只能替换一次。
var new=str.replace(/X/g,”itcast”); //JS中的正则,是放在//中间的,不能加引号。g参数代表全部替换。
toLowerCase()
描述:转成小写
举例:str.toLowerCase()
toUpperCase()
描述:转成大写
举例:str.toUpperCase()
localeCompare(str)
描述:对字符串使用本地规则进行比较。我们使用的操作系统是中文操作系统,中文操作系统默认的排序规则就按“拼音”先后来排序的。
str1.localeCompare(str2)
如果str1 > str2 则返回一个大于0的值
如果str1=str2 则返回一个等于0的值
如果str1<str2 则返回一个小于0的值
onchange:当选择内容发生改变时,去调用JS验证函数。
length:取得数组元素的个数
shift():删除第一个数组元素,数组的长度-1。
pop():删除最后一个数组元素,数组的长度-1
unshift():在开头添加一个数组元素,数组的长度+1
push():在最后添加一个数组元素,数组的长度+1
注意:delete删除的是数组元素的内容,而shift()删除的是内容和下标。
join([separator)):将数组各个元素,用指定的连接符,连成一个字符串。与split()正好相反
separator是可选项,如果省略,则用逗号连接。
reverse():反转数组中各个元素,颠倒顺序。
sort()
描述:对数组中各个元素进行排序,默认是按字母的先后顺序排列。
格式:arr.sort([orderby])
参数:orderby是可选参数,它指定排序的规则,一般是一个函数。
(1)对数值进行排序
orderby函数必须接收两个参数,比如a和b;
orderby函数中使用return返回值;
如果a-b>0,返回1
如果a-b=0,返回0
如果a-b<0,返回-1
var arr=[1,2,10,12,3,31,15,19,25,39];
arr.sort(orderby);
function orderby(a,b)
{
return a-b;
}
document.write(arr);
一、创建Date对象的实例
(1)使用new关键字和Date()构造函数来创建
Var today=new Date(); //注意:如果不带参数,则创建一个当前系统时间的实例
(2)指定一个日期时间字符串参数
Var yestoday=new Date(“1990/10/23 10:09:00”); //可以创建基于某一个时间的一对象实例
二、Date对象的方法
getFullYear():取出四位的年份
getMonth():取出月份,取值0-11
getDate():取出天数
getHours():取出小时数
getSeconds():取出秒数
getMinutes():取出分钟数
getDay():取出星期值,取值:0-6
getTime():取出距离1970年1月1日,0时0分0秒的毫秒数
toLocaleString():转成字符串
在上一篇文章写了个高仿WIN10系统的光晕日历,这次来绘制一个光晕的时钟,也是在某些网页上看到的效果,时分秒分别以进度条的形式来绘制,而且这个进度条带有光晕效果,中间的日期时间文字也是光晕效果,整体看起来有点科幻的感觉,本控件没有什么技术难点,如果真要有难点的话也就是如何产生这个光晕效果,在使用painter绘制的时候,设置画笔,可以设置brush,brush可以是各种渐变效果,这个就非常强大了,主要有线性渐变、圆形渐变、锥形渐变,这三种渐变用得好,各种效果都得心应手随手拈来。
为了产生光晕效果,需要用到圆形渐变,并对圆形渐变中的不同的位置设置透明度值来处理,时分秒对应的进度可以自动计算出来,这个不难,比如直接用QTime可以获取对应的时分秒,然后时钟和分钟除以60,秒钟除以1000来获取对应的进度。绘制光晕文本采用的QPainterPath的addText来实现。
#ifndef SHADOWCLOCK_H
#define SHADOWCLOCK_H
/**
* 光晕时钟控件 作者:雨田哥(QQ:3246214072) 整理:feiyangqingyun(QQ:517216493) 2019-10-07
* 1:可设置圆弧半径宽度
* 2:可设置光晕宽度
* 3:可设置光晕颜色
* 4:可设置文本颜色
* 5:采用动画机制平滑进度展示时间
*/
#include <QWidget>
#ifdef quc
#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
#include <QtDesigner/QDesignerExportWidget>
#else
#include <QtUiPlugin/QDesignerExportWidget>
#endif
class QDESIGNER_WIDGET_EXPORT ShadowClock : public QWidget
#else
class ShadowClock : public QWidget
#endif
{
Q_OBJECT
Q_PROPERTY(int radiusWidth READ getRadiusWidth WRITE setRadiusWidth)
Q_PROPERTY(int shadowWidth READ getShadowWidth WRITE setShadowWidth)
Q_PROPERTY(QColor textColor READ getTextColor WRITE setTextColor)
Q_PROPERTY(QColor shadowColor READ getShadowColor WRITE setShadowColor)
public:
explicit ShadowClock(QWidget *parent=0);
~ShadowClock();
protected:
void paintEvent(QPaintEvent *);
void drawArc(QPainter *painter, int radius, qreal angle);
void drawText(QPainter *painter);
private:
int radiusWidth; //半径宽度
int shadowWidth; //光晕宽度
QColor textColor; //文本颜色
QColor shadowColor; //光晕颜色
public:
int getRadiusWidth() const;
int getShadowWidth() const;
QColor getTextColor() const;
QColor getShadowColor() const;
QSize sizeHint() const;
QSize minimumSizeHint() const;
public Q_SLOTS:
//设置半径宽度+光晕宽度
void setRadiusWidth(int radiusWidth);
void setShadowWidth(int shadowWidth);
//设置文本颜色+光晕颜色
void setTextColor(const QColor &textColor);
void setShadowColor(const QColor &shadowColor);
};
#endif // SHADOWCLOCK_H
【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】
点击这里:Qt资料领取(视频教程+文档+代码+项目实战)
css3实现圆盘时钟,总要的两个要点是css3动画(animation )属性与css3过渡(transform)属性。
例如:
animation: rotate_origin 86400s linear infinite;意思是执行一个名叫rotate_origin的动画,完成一个周期需要86400秒,动画执行是匀速的(linear),动画的播放次数是无限的。
transform: rotateZ(0deg);意思是沿着z轴旋转0度。
*请认真填写需求信息,我们会在24小时内与您取得联系。