原生javascript中,用cssText如何重写内联css
    注意:前面的分号是为了兼容ie,加号是为了不清除已有的内联样式
    代码:

    1. Element.style.cssText += ';width:100px;height:100px;top:100px;left:100px;'

    image.gif

    自定义一个方法来实现追加className的效果代码如下
    代码:

    1. function addClass(element,value) {
    2. if (!element.className) {
    3. element.className = value;
    4. } else {
    5. newClassName = element.className;
    6. newClassName += " "; //这句代码将追加的类名分开
    7. newClassName += value;
    8. element.className = newClassName;
    9. }
    10. }

    image.gif

    跨浏览器事件处理程序
    代码:

    1. var EventUtil = {
    2. addHandlers: function (element, type, handlers) {
    3. if (element.addEventListener) {
    4. // Chrome、FireFox、Opera、Safari、IE9.0及其以上版本
    5. element.addEventListener(type, handlers, false);
    6. } else if (element.attachEvent) {
    7. // IE8.0及其以下版本
    8. element.attachEvent('on' + type, handlers);
    9. } else {
    10. // 早期浏览器
    11. element['on' + type] = handlers;
    12. }
    13. },
    14. removeHandlers: function (element, type, handlers) {
    15. if (element.removeEventListener) {
    16. element.removeEventListener(type, handlers, false);
    17. } else if (element.detachEvent) {
    18. element.detachEvent('on' + type, handlers);
    19. } else {
    20. element['on' + type] = null;
    21. }
    22. }
    23. };

    image.gif

    点击某一个 Li 标签时,将 Li 的背景色显示在 P 标签内,并将 P 标签中的文字颜色设置成 Li 的背景色
    代码:

    1. <body>
    2. <ul class="palette">
    3. <li style="background-color:crimson"></li>
    4. <li style="background-color:bisque"></li>
    5. <li style="background-color:blueviolet"></li>
    6. <li style="background-color:coral"></li>
    7. <li style="background-color:chartreuse"></li>
    8. <li style="background-color:darkolivegreen"></li>
    9. <li style="background-color:cyan"></li>
    10. <li style="background-color:#194738"></li>
    11. </ul>
    12. <p class="color-picker"></p>
    13. <script>
    14. /*
    15. 基于如上 HTML,实现如下功能:
    16. 点击某一个 Li 标签时,将 Li 的背景色显示在 P 标签内,并将 P 标签中的文字颜色设置成 Li 的背景色
    17. */
    18. var ul = document.querySelector('.palette');
    19. var p = document.querySelector('.color-picker');
    20. ul.onclick = function(e){
    21. var ev = e || window.event;
    22. //target是火狐,srcElement是IE
    23. var target = ev.target || ev.srcElement;
    24. var color = target.style.backgroundColor;
    25. p.textContent = color;
    26. p.style.cssText = 'color:'+color+';';
    27. }
    28. </script>
    29. </body>

    image.gif

    setInterval
    参考:https://www.cnblogs.com/everest33Tong/p/6322484.html
    setInterval(“fun()”,1000); 这句如果写在window.onload的内部,会报错
    原因:这种调用fun的写法类似eval语句,是将引号内的代码进行处理执行。这时候,是在全局作用域内找fun()函数,但是window.onload对于window来说属于局部,局部外是找不到局部内的fun()函数的。

    分别使用 setTimeout 和 setInterval 实现以下功能:
    点击按钮时,开始改变 fade-obj 的透明度,开始一个淡出(逐渐消失)动画,直到透明度为0
    在动画过程中,按钮的状态变为不可点击
    在动画结束后,按钮状态恢复,且文字变成“淡入”
    在 按钮显示 淡入 的状态时,点击按钮,开始一个“淡入”(逐渐出现)的动画,和上面类似按钮不可点,直到透明度完全不透明
    淡入动画结束后,按钮文字变为“淡出”
    暂时不要使用 CSS animation (以后我们再学习)
    思路:setTimeout方式的关键点是递归,每次递归都会将透明度修改1/10的程度,透明度走到底,递归就返回空值来结束这个过程。总共两个方法,淡入一个,淡出一个,每个方法都有递归。
    代码(setTimeout方式):

    1. var fadeObj = document.querySelector('#fade-obj');
    2. var o = 1;
    3. var fadeBtn = document.querySelector('#fade-btn');
    4. function cha(){
    5. if(o < 0){
    6. console.log(o);
    7. fadeBtn.removeAttribute('disabled');
    8. fadeBtn.textContent = '淡入';
    9. return;
    10. }
    11. o -= 0.1;
    12. fadeObj.style.opacity = o;
    13. setTimeout(cha,100);
    14. }
    15. function cha2(){
    16. if(o > 1){
    17. console.log(o);
    18. fadeBtn.removeAttribute('disabled');
    19. fadeBtn.textContent = '淡出';
    20. return;
    21. }
    22. o += 0.1;
    23. fadeObj.style.opacity = o;
    24. setTimeout(cha2,100);
    25. }
    26. fadeBtn.onclick = function(){
    27. if(fadeBtn.textContent == '淡出'){
    28. setTimeout(cha,100);
    29. fadeBtn.setAttribute('disabled','disabled');
    30. }else{
    31. setTimeout(cha2,100);
    32. fadeBtn.setAttribute('disabled','disabled');
    33. }
    34. }

    image.gif

    学习来实现一个帧动画:
    基于一个我们提供的图片,实现 IFE2016中Erik笑容的动画
    图片地址:http://ife.baidu.com/2016/sta…
    注意,依然不要使用 CSS animation,因为我们这里要学习的是使用 JavaScript 来操作 CSS,而不是为了完成这个任务。
    思路:分正方向和反方向。用定时器不断执行,每执行一次,就将整体图片向某个方向移动一张图的位置,同时将这个移动的位置对应的数字来修改背景图的纵坐标就可以了。
    代码:

    1. <head>
    2. <meta charset="UTF-8">
    3. <title>IFE ECMAScript</title>
    4. <style>
    5. .round{
    6. width:480px;
    7. height:480px;
    8. }
    9. </style>
    10. </head>
    11. <body>
    12. <div class="round">
    13. </div>
    14. <script>
    15. var roundBox = document.querySelector('.round');
    16. roundBox.style.backgroundImage = 'url(./erik_ce204002.jpg)';
    17. roundBox.style.backgroundRepeat = 'no-repeat';
    18. var m = 0;
    19. var fangxiang = true;
    20. setInterval(function(){
    21. if(fangxiang){
    22. if(m <= -8160){
    23. fangxiang = false;
    24. }
    25. m -= 480;
    26. roundBox.style.backgroundPositionY = m + 'px';
    27. }else{
    28. if(m >= 0){
    29. fangxiang = true;
    30. }
    31. m += 480;
    32. roundBox.style.backgroundPositionY = m + 'px';
    33. }
    34. },100);
    35. </script>
    36. </body>

    image.gif