第十章 实现动画效果

var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")"; 第一个参数是个字符串,所以需要单引号!!!

move_elem = setTimeout(repeat,interval);  //复制给一个变量,当我们想取消一个正在排队等待执行的函数,可以用clearTimeout(move_elem); interval参数表示在多少秒之后执行函数(单位是毫秒)
var xpos = parseInt(elem.style.left);  //parseInt提取整数,比如50px,使用这个函数后返回的就是50  当然还有parseFloat

CSS overflow属性,可以对内容进行裁剪,只让一部分内容显示,他可以有四种取值

1:visible  不可裁剪一出内容,浏览器将溢出内容显示在容器之外,内容全部可见

2:hidden 隐藏溢出内容,溢出容器区域的内容被隐藏,只有一部分可见

3:scroll  类似于hidden 但是多出了一个滚动条,可以滚动看到隐藏内容

4:auto  类似于scroll 但只有容器发生溢出是才自动显示出一个滚动条,如果内容没有溢出,不显示滚动条

position设置为relative (0,0)坐标将会重新定义  相对定位,参照父级原始点

javascript 允许我们为元素创建属性,比如

var elem = document.getElementById(elementID);

elem.movement = setTimeout(repeat,interval);  //elem.movement 这很像创建一个变量 但是这个变量只是专属于元素elementID

抽象的通用函数moveElement如下

function moveElement(elementID,final_x,final_y,interval) {

    if(!document.getElementById) return false;
if(!document.getElementById(elementID)) return false; var elem = document.getElementById(elementID);
if(elem.movement)          //有的时候会出现第一个函数还没执行完,我们又跑去执行第二个函数,这种情况下 可能出错 所以我们价格判断 然后clearTimeout
{
clearTimeout(elem.movement);
} if(!elem.style.left) elem.style.left = "0px";
if(!elem.style.top) elem.style.top = "0px"; var xpos = parseInt(elem.style.left);
var ypos = parseInt(elem.style.top);
var dist = 0; if(xpos == final_x && ypos == final_y) return true;
/*
Math对象   ceil方法,向大于方向舍入为最接近的整数
       floor方法,向小宇方向舍入为最接近的整数
       round方法,将任意浮点数舍入为与之最接近的整数
*/
if(xpos < final_x)
{
dist = Math.ceil((final_x - xpos)/10);    //每次移动十分之一,加快移动速度 xpos += dist;
}
else if(xpos > final_x)
{
dist = Math.ceil((xpos - final_x)/10);
xpos = xpos - dist;
} if(ypos < final_y)
{
dist = Math.ceil((final_y - ypos)/10);
ypos += dist;
}
else if(ypos > final_y)
{
dist = Math.ceil((ypos - final_y)/10);
ypos = ypos - dist;
} elem.style.left = xpos + "px";
elem.style.top = ypos + "px"; var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
elem.movement = setTimeout(repeat,interval);
}
    <div id="slideshow">
<img src="topics.gif" alt="building blocks of web design" id="preview">
</div>
这一段只是为了javascript而存在的,可以在js中实现这段 需要注意的是: #preview{
  position:absolute;
}
这一段在CSS中不可以缺少,否则实现不了动画效果!!

第十一章 HTML5

创建灰度图片,但是在IE中可以执行,在Chome中却不行,getImageData报错

  

function convertToGS(img) {
//Modernizr是一个Javascript库,检测浏览器是否支持canvas
if(!Modernizr.canvas) return; //保存原始的彩色版
img.color = img.src; //创建灰度版
img.grayscale = createGSCanvas(img); img.onmouseover = function () {
this.src = this.color;
} img.onmouseout = function () {
this.src = this.grayscale;
} img.onmouseout();
} function createGSCanvas(img) { var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height; var ctx = canvas.getContext("2d"); ctx.drawImage(img,0,0); //获取图片区域的数据,data属性返回一个对象,包含了image对象的图片数据 即r g b A(alpha通道)
var img_data = ctx.getImageData(0,0,img.width,img.height); for(var i =0; i < img_data.data.length; i += 4)
{
var r = img_data.data[i];
var g = img_data.data[i + 1];
var b = img_data.data[i + 2]; img_data.data[i] = img_data.data[i + 1] = img_data.data[i + 2] = (r + g +b)/3;
} ctx.putImageData(img_data,0,0);
  //返回图片内容作为新的灰度图片的源
return canvas.toDataURL();
}

  

HTML5 video  自定义控件 部分js代码

function addControls(vid) {

    vid.removeAttribute("controls");  //移除浏览器默认的控件

    var controls = document.createElement("div");
controls.setAttribute("class","controls"); var play = document.createElement("button");
play.setAttribute("title","play");
// play.innerHTML = '&#25BA;';
play.innerHTML = '►';  //note!!! controls.appendChild(play); vid.parentNode.insertBefore(controls,vid); play.onclick = function () {if(vid.ended)
vid.currentTime = ; if(vid.paused)
{
vid.play();
}
else
{
vid.pause();
}
} //利用play pasue ended事件来监控
vid.addEventListener("play",function () {  //当视频正在播放时 会触发play事件 跑这个函数
play.innerHTML = '▐▐';
play.setAttribute('paused', true); },false);      //第三个参数为false 说明由外往里获取 true的话说明是由里王外获取 vid.addEventListener("pause",function () {  //当视频暂停时 会触发pause事件 跑这个函数
play.removeAttribute('paused');
play.innerHTML = '►'; },false); vid.addEventListener("ended",function () {
vid.pause();
},false); }

HTML5 表单

为了应对不兼容浏览器,可以进行兼容性检查 可以使用inputtypes.type属性    比如 if(!Modernizr.inputtypes.date) --检查生成日期的脚本  if(!Modernizr.inputtypes.placeholder) --检查生成占位符的脚本

 onFocus事件就是当光标落在文本框中时发生的事件。

 onBlur事件是光标失去焦点时发生的事件。

JavaScript DOM编程艺术读书笔记(四)的更多相关文章

  1. JavaScript DOM编程艺术读书笔记(一)

    第一章,第二章 DOM:是一套对文档的内容进行抽象和概念化的方法. W3C中的定义:一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态的访问和修改文档的内容,结构和样式. DHTML( ...

  2. JavaScript DOM编程艺术读书笔记(三)

    第七章 动态创建标记 在web浏览器中往文档添加标记,先回顾下过去使用的技术: <body> <script type="text/javascript"> ...

  3. JavaScript DOM编程艺术读书笔记(二)

    第五章 最佳实践 平稳退化(graceful degradation):如果正确使用了JavaScript脚本,可以让访问者在他们的浏览器不支持JavaScript的情况下仍能顺利地浏览你网站.虽然某 ...

  4. JavaScript DOM编程艺术 - 读书笔记1-3章

    1.JavaScript语法 准备工作 一个普通的文本编辑器,一个Web浏览器. JavaScript代码必须通过Html文档才能执行,第一种方式是将JavaScript代码放到文档<head& ...

  5. JavaScript DOM编程艺术 读书笔记

    2. JavaScript语法 2.1 注释      HTML允许使用"<!--"注释跨越多个行,但JavaScript要求这种注释的每行都必须在开头加上"< ...

  6. 《javascript dom编程艺术》笔记(一)——优雅降级、向后兼容、多个函数绑定onload函数

    刚刚开始自学前端,如果不对请指正:欢迎各位技术大牛指点. 开始学习<javascript dom编程艺术>,整理一下学习到的知识.今天刚刚看到第六章,记下get到的几个知识点. 优雅降级 ...

  7. JavaScript DOM编程艺术学习笔记(一)

    嗯,经过了一周的时间,今天终于将<JavaScript DOM编程艺术(第2版)>这本书看完了,感觉受益匪浅,我和作者及出版社等等都不认识,无意为他们做广告,不过本书确实值得一看,也值得推 ...

  8. JavaScript DOM编程艺术-学习笔记

    发现基础不是很好,补习一下.37买了2本书(dom编程和高级程序设计). 以前读书总是自己勾勾画画,有点没意思.现在写下来,说不定会成为传世经典.哈哈...........随便扯扯淡. 第一天(201 ...

  9. JavaScript DOM编程艺术-学习笔记(第三章、第四章)

    第三章: 1.js的对象分为三种:①用户自定义对象 ② 内建对象(js提供的对象) ③宿主对象(js寄宿的环境-浏览器,提供的对象) 2.文档是由节点组成的集合,即dom树,html元素是根元素,是唯 ...

随机推荐

  1. Redis数据库入门教程

    [使用redis客户端] 我们直接看一个例子: 复制代码 代码如下: //这样来启动redis客户端了 $ ./redis-cli //用set指令来设置key.value 127.0.0.1:637 ...

  2. linux命令-dd {拷贝并替换}

    一 命令解释: dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: if=文 ...

  3. 华硕Z97-A主板声卡设置

    $ vim /usr/share/alsa/alsa.conf ## defaults# # show all name hints also for definitions without hint ...

  4. springmvc 接受特殊类型字段的处理方法

    springmvc接受前台传入的数据时如果该字段类型无法被封装(如Date),则会出现400 Bad Request错误,解决方法如下. 1.在需要处理的字段前加上注解: @DateTimeForma ...

  5. sax/dom/jdom/dom4j的区别

    sax/dom/jdom/dom4j的区别[转] 博客分类: xml   网上能够查到很多的4种解析方式的区别,我再做一下摘录和总结,顺带给自己做个备份. SAX sax分析器在对xml文档进行分析时 ...

  6. JVM 内存的那些事

    转自:http://blog.jobbole.com/104863/ 对于Java程序员你来说,在虚拟机内存管理的帮助下,不需要为每个new对象都匹配free操作,内存泄露和内存溢出等问题也不太容易出 ...

  7. For Your Dream

    队名:Braveheart 队员介绍: 队长:李洋洋 队员:姚欢,杨仁波,张波,乔闯 项目名称:数据沈航 总体任务: 收集整理学校的数据,为每个想要了解沈航的人展现一份我们收集来的信息 项目分组: ( ...

  8. iOS10 权限适配

    权限适配 这应该算iOS10系统适配的范畴,最近这两个都在弄,所以就直接和Xcode8适配一起写出来了. 在iOS10之后需要在Info.plist中,添加新的字段获取权限,否则在iOS10上运行会导 ...

  9. ajax通讯之格式详解

    前言: ajax的出现,一定程度上改变了js的命运,同时也被广泛使用,而jq的兴起也大大降低了ajax的使用难度.虽然,jq的ajax方法使用起来十分便利,但是大部分开发人员也仅仅只是对其中的几个属性 ...

  10. phthon

    没什么特别的,我们项目的跨平台代码都是在Windows环境下编码,然后跨平台编译调试,C++和Python代码都是如此.我们用C++实现底层和框架,用ctypes将纯C的API给Python化,然后用 ...