移动端滑动轮播图

---恢复内容开始---

css样式如下:

<style>
            *{
                padding: 0;
                margin: 0;
                list-style: none;
            }
            html{
                font-size: 20px;
            }
            #wrap{
                width: 16rem;
                height: 7rem;
                margin: 0 auto;
                overflow: hidden;
            }
            #wrap ul{
                width: 80rem;
                height: 7rem;
                transform: translate3d(-16rem,0,0);
            }
            #wrap ul li{
                width: 16rem;
                height: 7rem;
                color: white;
                font-size: 30px;
                text-align: center;
                line-height: 7rem;
                float: left;
            }
        </style>

script.js如下:

代码都有注释

DOMContentLoaded事件和load事件的区别。load事件是window对象上的事件。指的是网页资源已经加载完毕(包括但不限于DOM、图片、音频、脚本、插件资源以及CSS)

DOMContentLoaded事件是document对象上的事件。指的是DOM已经加载完毕。IE中有个私有的事件onreadystatechange事件跟这个标准事件类似。

因此DOMContentLoaded事件都会比load事件提前触发。

parse()
用于从一个字符串中解析出json

JSON.stringify
用于从一个对象解析成字符串

      <script>
            document.addEventListener(‘DOMContentLoaded‘,function(){
                var oUl = document.querySelectorAll(‘#wrap ul‘)[0];
                var aLi = oUl.children;
                var bSing = true;
                //储存当前在第一个页面
                var iNow = 1;
                var x = -iNow * aLi[0].offsetWidth;
                oUl.addEventListener(‘touchstart‘,function(ev){
                    if (bSing == false)return;
                    bSing = false;
                    //手指按下的时候
                    var downX = ev.targetTouches[0].pageX;
                    var disX = downX - x;

                    function fnMove(ev){
                        x = ev.targetTouches[0].pageX - disX;
                        //translate3d 开启手机滑动硬件加速
                        oUl.style.WebkitTransform =‘translate3d(‘ + x + ‘px,0,0)‘;
                    };

                    function fnEnd(ev){
                        //清除两个事件
                        oUl.removeEventListener(‘touchmove‘,fnMove,false);
                        oUl.removeEventListener(‘touchend‘,fnEnd,false);

                        //手指抬起的时候
                        var upX = ev.changedTouches[0].pageX;
                        //有个transition 动画效果
                        oUl.style.WebkitTransition = ‘all .3s ease‘;
                        //从左到右滑动时是负数,所以要用Math.abs()
                        if (Math.abs(upX - downX) > 80) {
                            //切换到下一张
                            if (downX > upX) {
                                //当前页面 ++
                                iNow ++;
                                if (iNow == aLi.length)iNow = aLi.length - 1;
                            } else{
                                //否则 --
                                iNow --;
                                if (iNow == -1)iNow = 0;
                            };
                        };
                        x = -iNow * aLi[0].offsetWidth;
                        //再次执行transition 动画效果
                        oUl.style.WebkitTransform = ‘translate3d(‘ + x + ‘px,0,0)‘;

                        //运动结束的标志
                            function moveEnd(){
                                bSing = true;
                                //清除transition 动画效果
                                oUl.removeEventListener(‘transitionend‘,moveEnd,false);
                                //左边
                                if(iNow == aLi.length - 1){
                                    iNow = 1;
                                    x = -iNow * aLi[0].offsetWidth;
                                    oUl.style.WebkitTransition = ‘none‘;
                                    oUl.style.WebkitTransform = ‘translate3d(‘ + x + ‘px,0,0)‘;
                                }
                                //右边
                                if (iNow == 1) {
                                    iNow = 3;
                                    x = -iNow * aLi[0].offsetWidth;
                                    oUl.style.WebkitTransition = ‘none‘;
                                    oUl.style.WebkitTransform = ‘translate3d(‘ + x + ‘px,0,0)‘;
                                }
                                document.title = iNow;
                            }
                            //监听transition动画效果
                        oUl.addEventListener(‘transitioned‘,moveEnd,false);
                    };
                    //监听move&end事件
                    oUl.addEventListener(‘touchmove‘,fnMove,false);
                    oUl.addEventListener(‘touchend‘,fnEnd,false);
                    //阻止默认事件
                    ev.preventDefault();
                },false);
            },false);
        </script>

body内容如下:

<div id="wrap">
      <ul>
          <li style="background: slateblue;">Slide 3</li>
          <li style="background: salmon;">Slide 1</li>
          <li style="background: skyblue;">Slide 2</li>
          <li style="background: slateblue;">Slide 3</li>
          <li style="background: salmon;">Slide 1</li>
       </ul>
</div>

具体情况看自己需求,如有什么不明白私信或留言给我。

---恢复内容结束---

时间: 2024-10-20 19:48:01

移动端滑动轮播图的相关文章

JavaScript实现移动端轮播图效果

功能描述: 自动无缝轮播图片,底部小圆点跟图片保持一致:手指左右移动轮播图,移动距离大于50px播放下一张(或上一张),小于50px则回弹 具体功能实现: 1.定时器 自动轮播图片 先声明一个index=0用来存图片索引: 添加一个定时器,每隔两秒调用一次,每调用一次定时器(图片播放一次)index就加一: 通过transform(变形)属性和transition(过渡)属性实现图片的轮播. 1 var index = 0; 2 var timer = setInterval(function(

告别组件之教你使用原生js和css写移动端轮播图

在工作中由于项目需要要写一个轮播图,本想使用组件直接调用实现快速开发,但是一想到自己经常使用组件但是让自己手写的话确实一点都不会. 一个不会手写组件的前端程序员不是一个好程序员!于是打算自己手写一个. 老规矩,首先看一下最终效果,这个最终可以实现定时自动播放,触摸滑动,手动修改下面横条效果等功能. 项目中使用到的HTML代码如下 <div class="banner"> <ul class="clearfix"> <li><

html+css+js 实现自动滑动轮播图

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>轮播图</title> <script type="text/javascript" src="js/jquery.min.js"></script> <style type="te

滑动轮播图实现最后一张图片无缝衔接第一张图片

原理:使用insertBefore和insertAfter方法调整图片顺序. 测试:firefox/chrome/IE11正常 已知不足:每次播放均使用了一次insertBefore和insertAfter,可考虑在最后一张图的时候将前几张图片整体后移.以后有空再优化. 1.HTML结构 alt的值将作为图片的描述信息出现在infobox里. <div class="outerbox"> <div class="innerbox"> <

移动端轮播图

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0"/> <style

移动端轮播图插件(支持Zepto和jQuery)

一. 效果图 二. 简单介绍 代码都有注释,逻辑简单,不做更多赘述. /* * slider */ ; (function($) { $.extend($.fn, { slider: function(obj) { this.each(function() { // 当前Zepto对象 var $self = $(this); var dom = { "wrap": $self.find(".slider-list"), "item": $sel

jquery 移动端轮播图

<div class="slide"> <div class="slide-box"> <ul class="slide-ul"> <li><a href="" title="1111"><img src="http://www.heibaipig.com/demo/images/test/1.jpg"></a

0199 移动端 之 轮播图

1.2.1 案例: 移动轮播图 移动端轮播图功能和基本PC端一致. 可以自动播放图片 手指可以拖动播放轮播图 1.2.2 案例分析 自动播放功能 开启定时器 移动端移动,可以使用translate 移动 想要图片优雅的移动,请添加过渡效果 自动播放功能-无缝滚动 注意,我们判断条件是要等到图片滚动完毕再去判断,就是过渡完成后判断 此时需要添加检测过渡完成事件? transitionend? 判断条件:如果索引号等于 3 说明走到最后一张图片,此时 索引号要复原为 0 此时图片,去掉过渡效果,然后

Android——ViewPager和内部view之间的事件分发及轮播图

viewpager 在滑动的过程中是如何触发view身上的事件的,换句话说,viewpager在滑动的过程中到底是滑动的它里面的view,还是滑动的viewpager本身? 一.示例代码: 1.自定义ViewPager:MyViewPager,重新dispatchTouchEvent方法,添加一些事件处理的log信息. package com.example.viewpagerdemo; import android.content.Context; import android.support