zoukankan      html  css  js  c++  java
  • 运动小宗

    运动
    透明度:filter:alpha(opacity:30); opacity:0.3;()

    想让物体运动:

    window.onload=function startmove(){   setInterval 定时器:setInterval(函数,时间间隔) 
          var oDiv=document.getElementById('div1');
          setInterval(function (){
              oDiv.style.left=oDiv.offsetLeft+10+'px';
          },30);
    } 

    offsetLeft 获取的是相对于父对象的左边距

    speed=speed>0?Math.ceil(speed):Math.floor(speed); 向上/下取整

    1.基础:(匀速运动+透明度    求透明度做法:先设个变量用变量行走最后再把变量赋给opacity)

    #div1{filter:alpha(opacity:30); opacity:0.3;}
    <script>
    var alpha=30;  变量
    var timer=null;
    function startMove(iTarget)
    {
        var oDiv=document.getElementById('div1');
        
        clearInterval(timer);
        timer=setInterval(function (){
            var speed=0;
            
            if(alpha<iTarget)
            {
                speed=10;
            }
            else
            {
                speed=-10;
            }
            
            if(alpha==iTarget)
            {
                clearInterval(timer);
            }
            else
            {     
                            oDiv.style.left=oDiv.offsetLeft+speed+'px';
                //透明度:
                            alpha+=speed;
                oDiv.style.filter='alpha(opacity:'+alpha+')';
                oDiv.style.opacity=alpha/100;//
            }
        }, 30);
    }
    </script>

    但是因为是匀速运动 某些情况下并不能准确到达某个位置 document.title=oDiv.offsetLeft;
    所以 物体和目标之间的距离<(匀速运动)速度 就算完成了
    在人眼无法判断出的前提下最后直接跳到那里就好了 oDiv.style.left=target+'px';

    实例 淡入淡出  就上面那个透明度

    实例 “分享到”侧边栏:(我的难点在这 )

    #div1{
    150px; height:200px;position:absolute;background:green;
    left:-150px;
    /*重点:left:-150px;(150是宽度) 一开始网页这部分都是收在里面的,鼠标碰到才会出来
    所以思路就是鼠标未碰:left:-150px; 碰到:left:0px;*/
    }

    #div1 span{ position:absolute; 20px; height:60px; 
              line-height:20px; background:blue; right:-20px;top:70px;
    
      }
    oDiv.onmouseover=function(){
            startmove();  iTarget==0px;(left由-150到0)
    }
    oDiv.onmouseout=function(){
            startmove2(); iTarget==-150px;
    }

    2.缓冲运动(速度逐渐减小 speed=(iTarget-oDiv.offsetLeft)/10)

    function startMove(){
            var oDiv=document.getElementById('div1');
            setInterval(function(){
               var speed=(300-oDiv.offsetLeft)/10; //300是目标位置iTarget
                      speed=speed>0?Math.ceil(speed):Math.floor(speed);
               oDiv.style.left=oDiv.offsetLeft+speed+'px';
         },30)
    }

    实例 悬浮框(在视图右下角) 悬浮框(在视图中间)第16集

    多物体运动框架 用自己的东西(obj)
    (比如分别变宽变高字变大边框变大)

    function getStyle(obj,name){
         if(obj.currentStyle){
             return obj.currentStyle[name];
         }
         else{
             return getComputedStyle(obj,false)[name];
         }
    }
    function startMove(obj,attr,target){
              clearInterval(obj.timer);
              obj.timer=setInterval(function(){
                  var cur=0;
                  if(attr=='opacity'){
                        cur=Math.round(parseFloat(getStyle(obj,attr))*100);
                  }
                  else{
                      cur=parseInt(getStyle(obj,attr));//如果不是透明度,还是普通的‘width’啥的,就还按之前的来
                  }
                   var speed;
                   speed=(target-cur)/6;
                   speed=speed>0?Math.ceil(speed):Math.floor(speed);
                   if(target==cur){
                       clearInterval(obj.timer);
                   }
                   else{ 
                       if(attr=='opacity'){
                             obj.style.filter='alpha(opacity:'+(cur+speed)+')';
                             obj.style.opacity=(cur+speed)/100;
                       }
                       else{
                            obj.style[attr]=cur+speed+'px';
                       }
                      
                   }
              },30)
    }

    所以一个点:

    一、获取非行间样式

    类似p.style.height只能获取行内样式

    p.offsetHeight当前高度,包含内外边距及边框

    获取非行间样式:

    function getStyle(obj,name){
     if(obj.currentStyle){
         return obj.currentStyle[name];
     }
     else{
         return getComputedStyle(obj,false)[name];
      }
     }

    1.window.getComputedStyle(obj,false)[‘attr’]

    该方法有两个参数,第一个是要获取样式的节点对象;第二个可以写成任何的字符一般写成false或者null这里最好是用false;
    后面直接跟要获取的样式(写在方括号中)即可。
    这个方法的返回值为一个对象,为计算后的样式的属性值对的集合。
    比如要获取某个p宽度。那么可以直接写成 var style=getComputedStyle(p,false)[‘width’]; alert(style);

    2.nodeObj.currentStyle[‘attr’];

    node.currentStyle,该属性返回的也是是一个对象,也是计算后的样式的属性值对的集合。比如要获取某个p宽度。那么可以直接写成
    var style=p.currentStyle['width'];
    alert(style);

    链式运动:一个动作做完了接下去做另一个动作

    在原有的简易运动框架中再增加一个参数fnEnd,因为在js中可以传任何参数。所以可以传一个函数进去,
    但是需要进行判断,如果传进来的fnEnd有内容,就执行fn(),没有就不执行。

    比如:

    oDiv.onmouseover=function(){
                        startMove(oDiv,'width',300,function(){
                            startMove(oDiv,'height',300,function(){
                                startMove(oDiv,'opacity',100);
                            });
                       });
               };先变宽再变高透明度再变化
    function startMove(obj,attr,target,fnEnd){}
  • 相关阅读:
    .NET平台系列18 .NET5的超强优势
    .NET平台系列17 .NET5中的ARM64性能
    .NET平台系列19 新世界中的.NET大统一平台架构解析
    .NET平台系列16 .NET5/Asp.Net Core 在全球Web框架权威性能测试 Web Framework Benchmarks 中的吊炸天表现
    .NET平台系列15 .NET5的吊炸天性能改进
    .NET平台系列14 .NET5中的新增功能
    从零开始学Typescript-类型注解
    从零开始学Typescript-第一个TS程序
    从零开始学Typescript-安装Typescript
    从零开始学VUE-创建VUE应用
  • 原文地址:https://www.cnblogs.com/yundong333/p/10403003.html
Copyright © 2011-2022 走看看