html5 横向滚动,无滚动条(transform:translate)

html5 横向滚动,用到了 touchstart、touchmove、touchend 控制修改transform:translate属性;[手机端或者浏览器模拟手机模式才有效果]

【转载请注明出处】

回头准备封装成插件都放到 github上  https://github.com/wt9213

html:

<div class="tab" id="tab">
            <div class="scroll-tab" id="scroll_tab" style="transform: translate(0px, 0px) translateZ(0px);">
                <a href="#" class="active">tab1</a>
                <a href="#">tab2</a>
                <a href="#">tab3</a>
                <a href="#">tab4</a>
                <a href="#">tab5</a>
                <a href="#">tab6</a>
                <a href="#">tab7</a>
                <a href="#">tab8</a>
            </div>
        </div>

css:

.tab{overflow: hidden;width: 90%;margin: 0 auto;}
.scroll-tab{display: flex;position: relative;}
.scroll-tab a{padding: 5px 10px;border-bottom: 2px solid transparent;text-decoration: none;color: #333333;font-size: 16px;font-family: "arial, helvetica, sans-serif","微软雅黑";}
.scroll-tab a.active{color: #0894ec;border-color: #0894ec;}

js:

    var $scrollTab;
    var $tab=document.getElementById("tab");
    var touchstartX, touchstartY;
    var scrollMax;
    var mX,mY;
    var moveto;
    $tab.addEventListener(‘touchstart‘, function (e) {
        var touch = e.targetTouches[0];
        touchstartX = touch.pageX;
        touchstartY = touch.pageY;
        $scrollTab=document.getElementById("scroll_tab");
        scrollMax = $scrollTab.scrollWidth - $tab.clientWidth;
    });
    $tab.addEventListener(‘touchmove‘, function (e) {
        var touch = e.targetTouches[0];
        mX = touch.pageX;
        mY = touch.pageY;
        if (touchstartY - mY <= 15 && touchstartY - mY >= -15) {
            var transform = $scrollTab.style.transform;
            transform = transform.replace("translate(", "");
            var currentX = Number(transform.substring(0, (transform.indexOf(",") - 2)));
            moveto = -(touchstartX - mX)/4.8;
            moveto = moveto + currentX;
            if (moveto <= (100) && moveto >= (-scrollMax - 100)) {
                $scrollTab.style.transform="translate(" + moveto + "px, 0px) translateZ(0px)";
            }
        }
    });
    $tab.addEventListener(‘touchend‘, function (e) {
        $scrollTab.style.transitionDuration="600ms";
        if (moveto > 0) {
            $scrollTab.style.transform="translate(0px, 0px) translateZ(0px)";
        } else if (moveto < (-scrollMax)) {
            $scrollTab.style.transform="translate(" + (-scrollMax) + "px, 0px) translateZ(0px)";
        }
        setTimeout(function () {
            $scrollTab.style.transitionDuration="0ms";
        }, 600);
    });
时间: 2024-10-11 10:24:43

html5 横向滚动,无滚动条(transform:translate)的相关文章

父节点使用css的transform: translate(0, 0)时position:fixed在chrome浏览器中无效

今天在做移动端的页面,无意间发现了一个Chrome浏览器下的一个bug,在使用CSS3的transform: translate(0, 0)属性对节点A进行位置转化,此时A节点下面有一个字节点B,节点B使用了position:fixed进行了定位,按照常理节点B应该悬挂在浏览器窗口视图上,不会跟随滚动条而滚动的,但是这个效果在Chrome浏览器下面是无效的,经过测试在IE11.Firefox.safari中均没有问题,在Opera中出现的效果和Chrome中完全一样. 总结一下:在Chrome和

Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条

本博主在一次个人移动端项目中,遇到这么一个需求:希望自己的项目中,头部导航条的效果可以像今日头条那样,横向滚动! 对于这样的效果,在各大移动端项目中几乎是随处可见,为什么呢? 我们都知道,对于移动端也就是手机上,我们页面的宽度并不像PC端那样大,可以显示很长的导航项,但对于我们移动端来说,由于功能的拓展,或者业务的细分,往往导航项也会随之增多,一旦超过移动端在一行的页面显示宽度,那便会出现导航项换行的现象,虽说也有这样布局,但一旦导航项增多到一定程度的时候,我们的页面(首页)将均被导航项霸占,这

web开发 小方法1-禁止横向滚动

最近学了学做了个公司的网站  总结了一些小方法 比如取消横向滚动条并禁止的横向滚动 这样就可以吧超出的切掉让网页更和谐 在body 标签 body{ text-align: center; overflow:scroll; overflow-x:hidden} 加入该代码就行  overflow属性详情可以去 w3cSchool 或者菜鸟教程

解决Ext 4.0.7 tree.Panel横向不出滚动条,纵向滚动条失效的问题

/** * 重写Ext.tree.Panel afterlayout方法,解决横向不出滚动条,纵向滚动条失效的问题 * 1.显示grid的css滚动条,横向滚动条没有办法使标题一块儿滚动,所以隐藏掉 * 2.将grid的css纵向滚动条定位到最右侧 * 3.获取到ext自动添加的自己写的滚动条,将它remove掉 */ Ext.tree.Panel.override({ listeners:{ afterlayout : function(treePanel, eOpts){ var emBod

CSS3 2D 转换【旋转transform:rotate(30deg); 移动transform: translate(50px,100px); 放大缩小transform:scale(2,4)】

CSS3 2D 转换 CSS3 转换 CSS3转换,我们可以移动,比例化,反过来,旋转,和拉伸元素. 它是如何工作? 变换的效果,让某个元素改变形状,大小和位置. 您可以转换您使用2D或3D元素. 浏览器支持 表格中的数字表示支持该属性的第一个浏览器版本号. 紧跟在 -webkit-, -ms- 或 -moz- 前的数字为支持该前缀属性的第一个浏览器版本号. Property           transform 36.0 4.0 -webkit- 10.0 9.0 -ms- 16.0 3.5

JS浏览器滚轮事件实现横向滚动照片展

if(window.attachEvent){ ///*IE8注册事件*/ this.oc.attachEvent('onmousewheel',function(e) { //函数体 }); } else if(window.addEventListener) ///*Firefox注册事件*/ { this.oc.addEventListener('DOMMouseScroll', function(e) { //函数体 }, false); } this.oc.onmousewheel =

ionic 横向滚动的菜单

1.1. 横向滚动的菜单 1.1.1. 功能介绍 不运用<ion-scroll>,直接用css样式,做成菜单栏的横向滚动. 最外层div设置display:-webkit-box;overflow-x:scroll 1.1.2. 代码 <div class="bar has-header" style="height: 44px;color: #000000;padding:0"> <div class="menu-box&q

vue 横向滚动样式&amp;&amp;$ref.scrollLeft初始化数据滚动位置

一.先说一下横向滚动样式: <div class="everyone-wrap" ref="parent"> <div class="everyone-cont"> <dl v-for="(item, index) in shareData.top" :key="index"> <dt> <van-image :src="item.pic&qu

asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)

自从腾讯微博上线以来,基本上就开始用了,一直到现在,作为一个开发人员,也看到了腾讯微博一直在不停的改变,也不知道大家有没有发现,腾讯微博提供两种加载数据的方式,一种是分页,一种是滚动浏览器滚动条加载数据,分页功能我想大家都做得太多了,今天我与大家分享一下我用滚动条滚动加载数据,小生不才,还望各位大侠指教,呵呵~ 下面开讲: 首先说一下思路,我用的是Jquery,然后通过Jquery的ajax()方法通过 HTTP 请求加载远程数据来实现的,用到Jquery,首先要应用jquery.min.js类