• 楼层跳跃


    1.前端页面布局

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
            body,html {
                height: 100%;
            }
            ul {
                list-style: none;
                height: 100%;
            }
            ul li {
                height: 100%;
            }
            ol {
                list-style: none;
                position: fixed;
                top: 80px;
                left: 50px;
            }
            ol li {
                 50px;
                height: 50px;
                border: 1px solid #000;
                text-align: center;
                line-height: 50px;
                margin-top: -1px;
                cursor: pointer;
            }
        </style>
    </head>
    <body>
        <ul>
            <li>鞋子区域</li>
            <li>袜子区域</li>
            <li>裤子区域</li>
            <li>裙子区域</li>
            <li>帽子区域</li>
        </ul>
        <ol>
            <li>鞋子</li>
            <li>袜子</li>
            <li>裤子</li>
            <li>裙子</li>
            <li>帽子</li>
        </ol>
    
        <script src="animate.js"></script>
        <script>
            //需求:点击ol中的li,屏幕滑动到对应的ul中的li的范围。
            //思路:还是利用window.scrollTo();利用缓动动画原理实现屏幕滑动。
            //步骤:
            //0.获取元素
            //1.指定ul和ol中的li的背景色,对应的li背景色相同
            //2.老三步。(获取元素并绑定事件)
            //3.利用缓动动画原理实现屏幕滑动
            //4.用scroll事件模拟盒子距离最顶端的距离。
    
            //0.获取元素
            var ul = document.getElementsByTagName("ul")[0];
            var ol = document.getElementsByTagName("ol")[0];
            var ulLiArr = ul.children;
            var olLiArr = ol.children;
            var target = 0;var leader = 0;var timer = null;
            //1.指定ul和ol中的li的背景色,对应的li背景色相同
            //设置一个数组,里面装颜色,然指定的颜色给数组中的指定元素
            var arrColor = ["pink","blue","yellow","orange","green"];
            //利用for循环给两个数组的元素上色
            for(var i=0;i<arrColor.length;i++){
                //上色
                ulLiArr[i].style.backgroundColor = arrColor[i];
                olLiArr[i].style.backgroundColor = arrColor[i];
    
                //属性绑定索引值
                olLiArr[i].index = i;
                //2.老三步。(并绑定事件)循环绑定,为每一个li绑定点击事件
                olLiArr[i].onclick = function () {
                    //***获取目标位置
                        //获取索引值。
                    target = ulLiArr[this.index].offsetTop;
    
                    //要用定时器,先清除定时器
                    clearInterval(timer);
                    //3.利用缓动动画原理实现屏幕滑动
                    timer = setInterval(function () {
                        //(1).获取步长
                        var step = (target-leader)/10;
                        //(2).二次处理步长
                        step = step>0?Math.ceil(step):Math.floor(step);
                        //(3).屏幕滑动
                        leader = leader + step;
                        window.scrollTo(0,leader);
                        //(4).清除定时器
                        if(Math.abs(target-leader)<=Math.abs(step)){
                            window.scrollTo(0,target);
                            clearInterval(timer);
                        }
                    },25);
                }
            }
    
            //4.用scroll事件模拟盒子距离最顶端的距离。
            window.onscroll = function () {
                //每次屏幕滑动,把屏幕卷去的头部赋值给leader,模拟获取显示区域距离顶部的距离
                leader = scroll().top;
            }
    
        </script>
    
    
    </body>
    </html>
    

      

    2.javascript 封装动画

    /*
    * @Author: Administrator
    * @Date:   2017-03-24 00:12:06
    * @Last Modified by:   Administrator
    * @Last Modified time: 2017-03-24 00:25:47
    */
    //动画基本设计
    function animate(ele,target){
    	clearInterval(ele.timer);
    	ele.timer=setInterval(function(){
    
    		var step=(target-offsetTop)/10;
    		step=step>0?Math.ceil(step):Math.ceil(step);
    
    		ele.style.left=ele.offsetTop+step+"px";
    
    		if(Math.abs(target-ele.offsetTop)<Math.abs(step)){
    			ele.style.left=target+"px";
    			clearInterval(timer);
    		}
    
    	},25)
    }
    
    //处理浏览器兼容
    
    function scroll(){
    	if (window.pageYOffset!=null) {
    
    		return{
    			left:window.pageXOffset,
    			top:window.pageYOffset
    		}
    	}else if (document.compatMode==="Css1compate") {
    		return{
    			left:document.documentElement.scrollLeft,
    			top:document.documentElement.scrollTop
    		}
    	}else{
    		return{
    			left:document.body.scrollLeft,
    			top:document.bod.scrollTop
    		}
    	}
    
    
    }
    

      

  • 相关阅读:
    【Windows】Windows server2008远程桌面只允许同时存在一个会话
    【go进阶】一个简单的go服务器实现
    【linux杂谈】查看centOS系统的版本号和内核号
    【linux杂谈】centos6和centos7中固定IP的方法
    Eclipse导入GitHub项目(转)
    国际锐评
    Spring Boot与分布式
    Spring Boot与分布式
    springboot 与任务
    废掉一个人最隐蔽的方式,是让他忙到没时间成长(转)
  • 原文地址:https://www.cnblogs.com/sj1988/p/6608162.html
Copyright © 2020-2023  润新知