translate3d模拟滚动条

translate3d模拟滚动条做移动端页面,通常是不用原生的scroll,而是用translate3d来模拟,原因主要是原生的scroll对移动端的支持并不是很好,样式也不好看(有滚动条出现),用translate3d来模拟还可以调用GPU来加速,提高性能。html:

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

做移动端页面,通常是不用原生的scroll,而是用translate3d来模拟,原因主要是原生的scroll对移动端的支持并不是很好,样式也不好看(有滚动条出现),用translate3d来模拟还可以调用GPU来加速,提高性能。

html:

   <div class="wrap">
        <div id="listContent">
                <ul id="listContentUl">
                    <li style="background: hotpink; height: 50px">我是header</li>
                    <li style="background: yellowgreen; height: 600px">我是content</li>
                    <li style="background: aqua; height: 50px">我是footer</li>
                </ul>
        </div>
    </div>

Jetbrains全家桶1年46,售后保障稳定

css:

        * { margin: 0; padding: 0; }
        htmlbody{ width:100%; height:100%; }
        body { background: grey }
        .wrap { margin: 100px auto 0; width: 400px; height: 500px; border: 1px solid #000; font-size: 30px; }
        #listContent { position: relative; width: 400px; height: 500px; overflow: hidden; }
        #listContentUl { position:absolute; top:0; left:0; transform:translate3d(0,0,0); }
        #listContentUl li{ list-style:none; width: 400px; height: 80px; border-bottom: 1px solid grey; }

js(基于jQuery):

$(function (){ 
   

            var viewWidth = $(window).width();
            var viewHeight = $(window).height();
            var desWidth = 640;
            var touchstart = 'touchstart';
            var touchmove = 'touchmove';
            var touchend = 'touchend';

            var $listContent = $('#listContent');
            var $listContentUl = $('#listContentUl');            

            var downY = 0;
            var prevY = 0;
            var downT = 0;
            var parentH = $listContent.height();
            var childH = $listContentUl.height();
            var onoff1 = true;
            var onoff2 = true;
            var timer = null;
            var speed = 0;

        function device(){ 
     
            var isMobile = /Mobile/i.test(navigator.userAgent);
            if(viewWidth > desWidth){
                $listContent.css('width','640px');
            }
            if(!isMobile){
                touchstart = 'mousedown';
                touchmove = 'mousemove';
                touchend = 'mouseup';
            }
        }

        function moveScroll(){ 
      
            $(document).on(touchmove,function(ev){ 
   
                ev.preventDefault();       //苹果手机滑动时 整个页面都滑动,阻止其默认事件
            });        
            $listContentUl.on(touchstart,function(ev){ 
   
                if(parentH > childH){
  
  return false;}
                var touch = ev.originalEvent.changedTouches ? ev.originalEvent.changedTouches[0] : ev;
                var This = this;
                downY = touch.pageY;
                prevY = touch.pageY;
                downT = $(this).position().top;
                onoff1 = true;
                onoff2 = true;
                clearInterval(timer);
                $(document).on(touchmove+'.move',function(ev){ 
   
                    var touch = ev.originalEvent.changedTouches ? ev.originalEvent.changedTouches[0] : ev;
                    var iTop = $(This).position().top;

                    speed = touch.pageY - prevY;
                    prevY = touch.pageY;

                    if(iTop >= 0){   
                        if(onoff1){
                            onoff1 = false;
                            downY = touch.pageY;
                        }
                        $(This).css('transform','translate3d(0,'+(touch.pageY - downY)/3+'px,0)');
                    }
                    else if(iTop <= parentH - childH){  
                        if(onoff2){
                            onoff2 = false;
                            downY = touch.pageY;
                        }
                        $(This).css('transform','translate3d(0,'+((touch.pageY - downY)/3 + (parentH - childH))+'px,0)');
                    }
                    else{
                        $(This).css('transform','translate3d(0,'+(touch.pageY - downY + downT)+'px,0)');
                    }

                });
                $(document).on(touchend+'.move',function(){ 
   
                    $(this).off('.move');

                    clearInterval(timer);
                    timer = setInterval(function(){ 
   
                        var iTop = $(This).position().top;
                        if(Math.abs(speed) <= 1 || iTop > 50 || iTop < parentH - childH - 50){
                            clearInterval(timer);
                            if(iTop >= 0){
                                $(This).css('transition','.2s');
                                $(This).css('transform','translate3d(0,0,0)');
                            }
                            else if(iTop <= parentH - childH){
                                $(This).css('transition','.2s');
                                $(This).css('transform','translate3d(0,'+(parentH - childH)+'px,0)');
                            }
                        }
                        else{
                            speed *= 0.9;
                            $(This).css('transform','translate3d(0,'+(iTop + speed)+'px,0)');
                        }

                    },13);

                });
                return false;
            });
            $listContentUl.on('transitonend webkitTransitionEnd',function(){ 
   
                $(this).css('transition','');
            });
        }

            device();
            moveScroll();

pc端:
这里写图片描述

移动端:
这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215883.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 解决ModuleNotFoundError: No module named ‘pip‘问题

    解决ModuleNotFoundError: No module named ‘pip‘问题Python学习遇到小问题:ModuleNotFoundError:Nomodulenamed‘pip’今天想要装一下wxPython第三方库来写一下Python的GUI的时候发现cmd窗口下无法执行pip命令,想了想昨晚好像是pip命令行提示了我有新版本可以更新使用,更新之后也不成功,但昨晚没有怎么理会,以为没事,但今早起来一看发现pip命令都用不了了,出现了ModuleNotFoun…

    2022年6月12日
    31
  • [Unity3D]Unity3D游戏开发Lua随着游戏的债券(于)

    [Unity3D]Unity3D游戏开发Lua随着游戏的债券(于)

    2022年1月13日
    45
  • Java 文件上传与下载

    Java 文件上传与下载MultipartFile这个类一般是用来接受前台传过来的文件Part能获取所有的请求参数的参数名,而Parameter只能获取非文件类型的参数名Part不能获得普通参数的参数值,只能从getParameter(String)获取参数值想要上传文件到服务器,必须使用Part获得二进制的输入流Part能获得上传文件的文件大小、文件类型HttpServletRequestrequest@RequestPart…

    2022年5月14日
    45
  • scrapy的爬虫案例

    scrapy的爬虫案例importscrapyfrom..itemsimportXiaoyouhuiItemclassXiaoyoujiSpider(scrapy.Spider):name=’XiaoYouHui’allowed_domains=[‘www.chinaxy.com’]start_urls=[‘http://www.chinaxy.com/2022index/2022/2022zymlall.html’]yjmu=[‘法学’,’工学’,’管理学’.

    2022年6月26日
    37
  • 思科静态路由配置_思科交换机trunk配置命令

    思科静态路由配置_思科交换机trunk配置命令1.配置静态路由路由器可以将不同网段之间的网络连接到一起,当路由器接收到数据包后要查看数据包中的目标IP,再检查自己的路由表,如果路由表中有和目标IP相匹配的路由条目,路由器才能将数据包按照该路由条目所指定的端口转发出去,实现不同网络之间的通信,那么路由器中的路由表是如何实现的呢?配置了路由器接口IP并为UP状态路由表中自动生成直连路由,对于非直连的路由,需通过静态路由管理员手工添加或通过配置动…

    2022年9月24日
    1
  • mysql创建数据库的步骤_mysql创建用户并授权

    mysql创建数据库的步骤_mysql创建用户并授权创建用户:createuser‘test’@’%’identifiedby‘test’;显示ERROR1396(HY000):OperationCREATEUSERfailedfor‘test’@’%’查看是不是存在这个用户selectuserfromuser;发现没有这个用户。记得上次有删除过这个用户。可能没有刷新权限flushprivileges;之后还是不行…

    2022年8月12日
    12

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号