js实现浏览器滚动缩放功能

要想实现通过鼠标滚轮滚动,缩放页面中的指定元素,主要是通过css3中的 transform: scale() 来实现的。

下面我说一下实现的基本思路步骤。
1、首先是要确定要实现滚动缩放的元素。样式代码省略了。

<div id='zoomchangebox' style='width:100px;height:100px;background:red'></div>

2、页面滚动事件的绑定与执行,此代码中设定滚动最大为原来的2倍,最小为原来的20%,并且做了滚动事件的节流处理。

//给页面绑定滑轮滚动事件
var scrollFn = function(e){
  if (window.scrollTimer) return;
    // 如果有需要阻止默认事件或事件冒泡的可以打开
    // e.preventDefault();
    // e.stopPropagation();
    window.scrollTimer = setTimeout(() => {
      e = e || window.event;
      var isGoDown = true;
      if (e.wheelDelta) { //第一步:先判断浏览器IE,谷歌滑轮事件
        if (e.wheelDelta > 0) { //当滑轮向上滚动时
          isGoDown = false;
        }
      } else if (e.detail) { //Firefox滑轮事件
        if (e.detail < 0) { //当滑轮向下滚动时
          isGoDown = false;
        }
      }
    if (isGoDown) {
      //向下滚动,执行放大元素
      zoomInFn();
    } else {
      //向上滚动,执行缩小元素
      zoomOutFn();
    }
    clearTimeout(window.scrollTimer);
    window.scrollTimer = null;
  }, 100);
};
//设定元素元大小为100;
var zoom = 100;
//缩小
var zoomInFn = function(){
  zoom -= 10;
  if (zoom < 20) {
    zoom = 20
  }
  setDivScale();
};
//放大
var zoomOutFn = function(){
  zoom += 10;
  if (zoom > 200) {
    zoom = 200
  }
  setDivScale();
};
//设置元素放大倍率样式
var setDivScale = function(){
  var scale = this.zoom / 100 ;
 document.getElementById('zoomchangebox').setAttribute('style','transform : scale(' + scale + ')');
};

//给页面绑定鼠标滚动事件
if (document.addEventListener) {//firefox
 document.body.addEventListener('DOMMouseScroll', scrollFn, false);
}
document.body.addEventListener('mousewheel', scrollFn, false);

下面补充一下CSS3中 transform 的基本用法:
可查看w3school中关于 transform 的基本介绍。https://www.w3school.com.cn/cssref/pr_transform.asp
我在这里补充一下:
1、scale缩放是按照原来元素的中心点进行缩放的。
2、缩放之后获取元素的offsetHeight和offsetWidth不改变,但是元素占据页面的尺寸有改变。
3、缩放会将元素的内边距padding、外边距margin、与边框border都会同步缩放。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容