移动端html5怎么实现原生tab滑动切换

移动端html5怎么实现原生tab滑动切换,第1张

 我们使用移动端时可以通过触屏手势左右滑动来切换TAB栏目,我们说的TAB一般由导航条和TAB对应的内容组成,切换导航条上的标签同时标签对应的内容也会跟着切换。

我们准备一个TAB导航#pagenavi,里面包含TAB导航要切换的四个导航按钮,然后是切换的主体内容#slider,这里应该放置四个li与导航按钮对应,内容自定义。

由于是移动端应用,我们加载zepto.js,zepto就是体积小的jquery。然后需要加载触屏滑动插件touchslider.js。

接下来我们就直接调用TouchSlider,通过设置绑定tab,滑动方向、速度、时间等信息实现内容切换,请看详细代码:

<script type="text/javascript">

var page='pagenavi'

var mslide='slider'

var mtitle='emtitle'

arrdiv = 'arrdiv'

var as=document.getElementById(page).getElementsByTagName('a')

var tt=new TouchSlider({id:mslide,'auto':'-1',fx:'ease-out',direction:'left',speed:600,timeout:5000,'before':function(index){

var as=document.getElementById(this.page).getElementsByTagName('a')

as[this.p].className=''

as[index].className='active'

this.p=index

var txt=as[index].innerText

$("#"+this.page).parent().find('.emtitle').text(txt)

var txturl=as[index].getAttribute('href')

var turl=txturl.split('#')

$("#"+this.page).parent().find('.go_btn').attr('href',turl[1])

}})

tt.page = page

tt.p = 0

for(var i=0i<as.lengthi++){

(function(){

var j=i

as[j].tt = tt

as[j].onclick=function(){

this.tt.slide(j)

return false

}

})()

}

</script>

解答:原文给出的各个方法是在对象中的,复制过来需要复制到对象中。

如下方法是针对全屏滑动的,如果需要针对某个元素监听的话将:

var html = document.documentElement || document.body

TouchInit(html)

改为

var oEl = document.querySelector("元素选择器")

TouchInit(oEl)

即可

---------------------- 完整代码分割线 --------------------------

修改内容如下(建议格式化下网页链接):

var html = document.documentElement || document.body

        TouchInit(html)

        function TouchInit(el){

          var minOffset = 30//最小偏移量,低于这个值不响应滑动处理

          var minTime = 60// 最小时间,单位:毫秒,低于这个值不响应滑动处理

          var startX = 0//开始时的X坐标

          var startY = 0//开始时的Y坐标

          var startTime = 0//开始时的毫秒数

          var obj = {

            touchStart: function(e){

              startX = e.touches[0].pageX// 获取触摸时的x坐标

              startY = e.touches[0].pageY// 获取触摸时的x坐标

              startTime = new Date().getTime()//获取毫秒数

            },

            touchCancel: function (e) {

              startX = 0//开始时的X坐标

              startY = 0//开始时的Y坐标

              startTime = 0//开始时的毫秒数

            },

            touchEnd: function (e) {

              var endX = e.changedTouches[0].pageX

              var endY = e.changedTouches[0].pageY

              var touchTime = new Date().getTime() - startTime//计算滑动时间

              //开始判断

              //1.判断时间是否符合

              if (touchTime >= minTime) {

                //2.判断偏移量:分X、Y

                var xOffset = endX - startX

                var yOffset = endY - startY

                console.log('xOffset', xOffset)

                console.log('yOffset', yOffset)

                //①条件1(偏移量x或者y要大于最小偏移量)

                //②条件2(可以判断出是左右滑动还是上下滑动)

                if (Math.abs(xOffset) >= Math.abs(yOffset) &&Math.abs(xOffset) >= minOffset) {

                  //左右滑动

                  //③条件3(判断偏移量的正负)

                  if (xOffset <0) {

              //向左滑动

window.open("www.baidu.com")

                    console.log('向左滑动')

                  } else {

                    console.log('向右滑动')

                  }

                } else if (Math.abs(xOffset) <Math.abs(yOffset) &&Math.abs(yOffset) >= minOffset) {

                  //上下滑动

                  //③条件3(判断偏移量的正负)

                  if (yOffset <0) {

                    console.log('向上滑动')

                  } else {

                    console.log('向下滑动')

                  }

                }

              } else {

                console.log('滑动时间过短', touchTime)

              }

            },

          }

          el.addEventListener("touchstart", obj.touchStart, false)

          el.addEventListener("touchend", obj.touchEnd, false)

          el.addEventListener("touchcancel", obj.touchCancel, false)

        }

举例说明:

通过一句addEventListener 就能够知道当前用户的点击是哪种设备,是手指的点击,是鼠标的单击还是触控笔的点击(平板设备都会带有触控笔):

<canvas id="MyCanvas"></canvas>

<script>

MyCanvas.addEventListener("MSPointerDown", MyBack, false)

function MyBack(e) {

alert(e.pointerType.toString())

}

</script>

通过回调的方法中 e.pointerType 还进行判断。

鼠标是4,触控笔是3,手指是2。

至于值为1是何种设备还有待研究。

还有需要注意的就是 想在javascript中添加对输入设备的识别,注册的方法事件也是有点点区别。

addEventListener 添加的事件为 MSPointerDown

而在IE10中对于这样的多种设备识别中优先处理的手指的点击,前提是不影响功能正常单击的情况下,然而IE10不仅仅能识别用户的输入设备还支持非常多的高级手势。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5912664.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-08
下一篇 2023-03-08

发表评论

登录后才能评论

评论列表(0条)

保存