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)
上一篇 2025年7月12日 下午9:01
下一篇 2025年7月12日 下午9:43


相关推荐

  • Linux中修改文件名

    Linux中修改文件名Linux 中修改文件名 没有直接修改的方式 需要借用 mv 或 cp 命令 mv 会把原路径文件删除 移动文件 参数 1 原文件路径参数 2 新文件路径 mvoldFilePat cp 不会删除原文件 复制文件 参数 1 原文件路径参数 2 新文件路径 cpoldFilePat

    2026年3月18日
    1
  • 对AutoResetEvent和ManualResetEvent的理解

    对AutoResetEvent和ManualResetEvent的理解一、作用AutoResetEvent和ManualResetEvent可用于控制线程暂停或继续,拥有重要的三个方法:WaitOne、Set和Reset。这三个方法的官方定义并不好理解,什么终止、非终止,乱七八糟的。在这里,我们以一种通俗易懂的概念来说明。 二、比喻如果把每个线程比作一辆汽车的话,AutoResetEvent和ManualResetEvent就

    2022年7月18日
    18
  • 激活成功教程软件_奇()怪()

    激活成功教程软件_奇()怪()这是博主的私人网站,里面收录了很多激活成功教程软件,以及一些奇奇怪怪的网站,这个网站已经经过国家工信部备案了,里面的内容博主都测试过才收录进来的,可以放下访问http://www.resourcestation.xyz…

    2022年10月12日
    6
  • JAVA日期格式化(Simpledateformat)

    Java日期格式化常用方法Java中Date类中的一些日期格式话方法都已过期,所以不推荐使用。一般格式化时,常用到这两个类:Calendar和SimpleDateFormat,使用方法如下:1.Calendar类Calendar类是abstract的,所以实例化方式得用静态方法:Calendarc=Calendar.getInstance();,此时的生成的实例依据的是当前系统时间;c.se…

    2022年4月17日
    555
  • 服务器系统tcpip.sys,tcpip.sys

    服务器系统tcpip.sys,tcpip.systcpip sys 文件说明 tcpip sys 文件是系统库中一个十分重要的文件 如果缺少了这款 tcpip sys 文件 您的设备或者电脑将会出现蓝屏或者无法开机的情况 马上下载 tcpip sys 这款文件修复吧 tcpip sys 官方版是系统中自带的文件 Tcpip sys 是微软使用的 TCP 并发连接数限制文件 默认值为 10 非常重要 很多朋友可能遇到 tcpip sys 导致的蓝屏 系统黑屏无法启动的问题

    2025年9月25日
    7
  • iwara_php,iwara里版mmd怎么下载_iwara里版mmd资源下载方法_软件侠下载站[通俗易懂]

    iwara_php,iwara里版mmd怎么下载_iwara里版mmd资源下载方法_软件侠下载站[通俗易懂]很多朋友发现iwara里版的一些mmd无法下载,下面小编就给大家带来iwara里版的mmd下载教程,这教程主要是针对T站没有改版以前上传的视频,改版以后上传的视频都是能直接下载的例:http://ecchi.iwara.tv/videos/voazs0aaulqvl67搜狗浏览器读取源代码文件页面view-source:http://ecchi.iwara.tv/videos/voazs0aau…

    2022年10月2日
    4

发表回复

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

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