资讯专栏INFORMATION COLUMN

全屏滚动封装(PC端)

siberiawolf / 1241人阅读

摘要:使用说明函数调用参数说明大盒子标签名大盒子名大盒子类名侧导航每层盒子标签名侧导航每层盒子名侧导航每层盒子类名任选一个传入兼容性兼容火狐及以上。如果想兼容最好传或者标签名类名没做处理或者可以自己再处理一下。这里写上面封装的函数

使用说明
函数调用 new FullScreenScroll(obj)
obj 参数说明:
{
outerTag: "大盒子标签名(String)",
outerId: "大盒子id名(String)",
outerClass: "大盒子类名(String)",
tipTag: "侧导航每层盒子标签名(String)",
tipId: "侧导航每层盒子id名(String)",
tipClass: "侧导航每层盒子类名(String)"
}
Tag、Id、Class任选一个传入
兼容性
兼容 Google、火狐、IE7及以上。
如果想兼容IE最好传id或者标签名 类名没做处理 或者可以自己再处理一下。
js代码如下
function FullScreenScroll(obj){
    // 外层盒子
    if(obj.outerTag){
        this.ul = document.getElementsByTagName(obj.outerTag)[0];
    }else if(obj.outerId){
        this.ul = document.getElementById(obj.outerId);
    }else{
        this.ul = document.querySelector("."+obj.outerClass);
    }
    // 内层每层盒子
    this.ulli = this.ul.children;
    // 侧导航每层盒子
    if(obj.tipTag){
        this.ol = document.getElementsByTagName(obj.tipTag)[0];
    }else if(obj.tipId){
        this.ol = document.getElementById(obj.tipId);
    }else{
        this.ol = document.querySelector("."+obj.tipClass);
    }
    this.olli = this.ol.children;
    // 定时器
    this.timer = null;
    // 控制滚动的开关 防止滑动过快
    this.flag = true;
    // 获取卷去的高度 兼容写法
    this.docTop = document.documentElement.scrollTop||document.body.scrollTop;
    // 规定盒子的初始位置的下标
    this.num = Math.round(this.docTop/this.ulli[0].offsetHeight);
    // 初始化元素信息
    this.eleInit()
    // 初始化函数
    this.init()
    var _this = this
    this.addEvent(window,"resize",function(){
        for(var i=0;i<_this.ulli.length;i++){
            _this.ulli[i].style.height = document.documentElement.clientHeight + "px";
        }
    })
}
// 初始化元素信息
FullScreenScroll.prototype.eleInit = function(){
    this.ul.style.height = document.documentElement.clientHeight*this.ulli.length + "px";
}
// 初始化函数 
FullScreenScroll.prototype.init = function(){
    // 给每个侧导航添加点击事件
    for(var i=0;i0){
                _this.num--;
            }else{
                _this.num=0
            }
            var target = _this.num*_this.ulli[0].offsetHeight
            _this.move(target)
        }
    },function(){
        // 向下滚动处理函数
        if(_this.flag){
            _this.flag = false;
            clearInterval(_this.timer)
        if(_this.num<_this.ulli.length-1){
            _this.num++;
        }else{
            _this.num=_this.ulli.length-1;
        }
        var target = _this.num*_this.ulli[0].offsetHeight;
        _this.move(target)
        }
    })
}
// 每屏运动的函数 target 滚动结束位置
FullScreenScroll.prototype.move = function(target){
    var _this = this;
    this.timer = setInterval(function(){
        // 滚动起点
        // var leader = document.documentElement.scrollTop||document.body.scrollTop;
        var leader = _this.ul.offsetTop;
        // 步长 距离/n
        var step = (-target-leader)/10;
        // 当步长过小时 根据向上运动(step<0)或向下运动(step>0) 即 target-leader 大于0或小于0 向上取整或向下取整控制步长,否则步长一直减小,不会到达终点。
        step = step>0?Math.ceil(step):Math.floor(step);
        // 判断是否到达终点
        // 会有 target-leader 不够一个步长的情况 这个时候会发生抖动
        if(Math.abs(-target-leader)0){
            upfn();
        }else{
            downfn();
        }
    }
}
// 监听事件兼容写法 obj 操作对象 type 事件类型 fn 回调函数
FullScreenScroll.prototype.addEvent = function(obj,type,fn){
    if(document.addEventListener){
        obj.addEventListener(type,fn,false);
    }else{
        obj.attachEvent("on"+type,fn);
    }
}
// 调用
new FullScreenScroll({
    outerTag:"ul",
    tipTag:"ol"
})
HTML、CSS代码
当然啦! html和css就需要自己写了。
这里有一个简单的丑陋的dome。



    
    Document
    


    
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/104804.html

相关文章

  • 用 ES6 写全屏滚动插件

    摘要:这篇文章将介绍如何使用原生主要使用语法实现全屏滚动插件,兼容手机触屏,触摸板优化,支持自定义页面动画,压缩后文件只有。 这篇文章将介绍如何使用原生 JS (主要使用 ES6 语法)实现全屏滚动插件,兼容 IE 10+、手机触屏,Mac 触摸板优化,支持自定义页面动画,压缩后 gzip 文件只有 2.15KB。完整源码在这 pure-full-page,点这查看 demo。 1)前面的话...

    liuchengxu 评论0 收藏0
  • AlloyTouch全屏滚动插件发布--30秒搞定顺滑H5页

    原文链接:https://github.com/AlloyTeam/AlloyTouch/wiki/AlloyTouch-FullPage-Plugin 先验货 showImg(https://segmentfault.com/img/remote/1460000007885626?w=280&h=280); 插件代码可以在这里找到。 注意,虽然是扫码体验,但是AlloyTouch.FullPag...

    _ivan 评论0 收藏0
  • 移动布局与适配

    摘要:实战之微信钱包腾讯服务界面网格布局是让开发人员设计一个网格并将内容放在这些网格内。对于移动端适配,不同的公司不同的团队有不同的解决方案。栅格系统用于处理页面多终端适配的问题。 grid实战之微信钱包 腾讯服务界面 CSS3网格布局是让开发人员设计一个网格并将内容放在这些网格内。而不是使用浮动制作一个网格,实际上是你将一个元素声明为一个网格容器,并把元素内容置于网格中。 移动端页面适配—...

    Clect 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<