1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

js实现导航栏上下动画效果详细演示

实现上下动画的方法

在开发中实现上下动画十分常见,需要控制元素的height值通过不断修改该值,才能实现动画效果,这里需要用到定时器。定时器分为两种,一种是重复不断的定时器setInterval(fn,time),另一种是延时只在设定时间后只出现一次的定时器setTimeout(fn,time)。在经历所有的传进的每一个值,都要用到一个boolean来控制是否完成解析,解析成功则返回true,结束定时器,返回false,直到返回true位置。

js实现导航栏上下动画效果详细演示

实现上下动画代码

如下是实现上下动画的完美运动js插件代码,该插件能根据传进来的值进行匹配,不仅有理想运动效果,且运行逻辑也非常合理。

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

function startMove(obj, json, fnEnd) {
  if (obj.timer) {
    clearInterval(obj.timer);
  };
  obj.timer = setInterval(function() {
    var bStop = true; //假设全部找到
    for (var attr in json) {
      var icurr = 0;
      if (attr == 'opacity') { //匹配key
        icurr = Math.round(parseFloat(getStyle(obj, attr)) * 100); //获取元素的属性值
      } else {
        icurr = parseInt(getStyle(obj, attr));
      };
      var sPeed = (json[attr] - icurr) / 8;
      sPeed = sPeed > 0 ? Math.ceil(sPeed) : Math.floor(sPeed);
      if (attr == 'opacity') {
        obj.style.filter = "alpha(opacity:" + (icurr + sPeed) + ")";
        obj.style.opacity = (icurr + sPeed) / 100;
      } else {
        obj.style[attr] = icurr + sPeed + 'px';
      }
      if (icurr != json[attr]) {
        bStop = false;
      }
    }
    if (bStop) {
      clearInterval(obj.timer);
      if (fnEnd) {
        fnEnd();
      }
    }
  }, 30);
}

用户只需要传入需要动画的元素、目标属性值、以及完成动画后的回调函数,即可以实现理想的动画效果。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/7372.html