原生JS 回到顶部、tab栏的切换

回到顶部:html里改变的头部还有 回到顶部按钮

 <div id="top" class="header" data-reactid=".0.0"></div>

  <div class="to-top" id="totop"></div>

js代码:
 

function my$(id) {
  return document.getElementById(id);
}

// 获取页面滚动距离的浏览器兼容性问题
// 获取页面滚动出去的距离
function getScroll() {
  var scrollLeft = document.body.scrollLeft || document.documentElement.scrollLeft;
  var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
  return {
    scrollLeft: scrollLeft,
    scrollTop: scrollTop
  }
}

// 获取元素
// 注意:不能用top。top 是window自带的一个属性,此属性是只读的。此属性默认是window对象
var bodyTop = my$('top');

// 回到顶部的按钮
var totop = my$('totop');

// 当拖动滚动条的时候执行
window.onscroll = function () {
  //1 当拖动滚动条的时候,当内容滚动出去 10px的时候,改变top的高度,并且显示回到顶部按钮
  // 调用common.js getScroll函数,获取页面滚动出去的距离
  var scrollTop = getScroll().scrollTop;
  if (scrollTop > 10) {
    // 改变top 样式 
    bodyTop.className = 'header fixed';
    // 显示回到顶部
    totop.style.display = 'block';
  } else {
    // 改变top 样式
    bodyTop.className = 'header';
    // 显示回到顶部
    totop.style.display = 'none';
  }
}

//2 当点击回到顶部按钮的时候,动画的方式,回到最上面,让滚动距离为0
var timerId = null;
totop.onclick = function () {
  if (timerId) {
    clearInterval(timerId);
    timerId = null;
  }

  timerId = setInterval(function () {
    // 步进 每次移动的距离
    var step = 10;
    // 目标位置
    var target = 0;

    // 获取当前位置
    var current = getScroll().scrollTop;

    if (current > target) {
      step = -Math.abs(step);
    }

	// documentElement  网页中的根元素 html
    // 判断当前是否到达目标位置
    if (Math.abs(current - target) <= Math.abs(step)) {
      clearInterval(timerId);
      document.body.scrollTop = target;
      document.documentElement.scrollTop = target;
      return;
    }

    current += step;
    document.body.scrollTop = current;
    document.documentElement.scrollTop = current;
  }, 5);
}

 

tab栏的切换:

			<div class="news">
				<div id="newsT" class="news-t">
					<a href="#" class="cuxiao">促销</a>
					<a href="#" class="gg">公告</a>
					<a href="#" class="more">更多</a>
					<div id="flag"></div>
				</div>
				<!-- 详细内容 -->
				<div id="newsContainer">
					<div class="news-b">
						<ul>
							<li><a href="#">挑战3天不洗头</a></li>
							<li><a href="#">挑战3天不洗头</a></li>
							<li><a href="#">益生菌领券满399减100</a></li>
							<li><a href="#">益生菌领券满399减100</a></li>
						</ul>
					</div>
					<div class="news-b hide">
						<ul>
							<li><a href="#">从今天起放假3天</a></li>
							<li><a href="#">全部商品5折</a></li>
						</ul>
					</div>
				</div>
			</div>

 

// 获取元素,整体的tab栏
var newsT = document.getElementById('newsT');
// 红色的线
var flag = document.getElementById('flag');
// 详细内容的容器
var newsContainer = document.getElementById('newsContainer');
//1 获取到a标签,注册事件
for (var i = 0; i < 2; i++) {
  var link = newsT.children[i];
  link.onmouseover = linkMouseover;
  // 设置a标签的自定义属性,记录索引
  link.setAttribute('index', i);
}

function linkMouseover() {
  //2 当触发a标签的mouseover,让红色的线执行动画,显示对应的详细内容
  // 让红色的线执行动画
  // 获取当前触发事件的a标签的位置
  var offsetLeft = this.offsetLeft;
  animate(flag, offsetLeft - 3, 30);

  // 显示对应的详细内容
  // 让所有的详细内容隐藏
  for (var i = 0, len = newsContainer.children.length; i < len; i++) {
    var div = newsContainer.children[i];
    // 判断类样式中是否已经有hide
    if (div.className.indexOf('hide') === -1) {
      div.className = 'news-b hide';
    }
  }
  // 当前对应的详细内容显示
  var index = parseInt(this.getAttribute('index'));
  newsContainer.children[index].className = 'news-b show';
}


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值