図回転移動端

とげに触発され、それが悲しみを感じることはありません。缶をオフに涙、また悲しいです。

カルーセル図これで終わり!とPCではないと同じではなく、同じイベントを移動する移動端末カルーセルマップを、包装、トリガ条件がそう今日は基本図カルーセルをカプセル化するために、同じではありません。

確かに我々はすべて、モバイルエンドまあを知って、画面は画面のサイズはメーカーによって異なり、同じ大きさではないので、私たちはそれができ、フローレイアウトを使用します!

最初のステップ、HTMLの基本的なスタイル

首先,咱先先出基本的轮播图样式, 
        <div class="container">
            <ul>
                <li>
                    <img src="images/l1.jpg">
                </li>
                <li>
                    <img src="images/l2.jpg">
                </li>
                <li>
                    <img src="images/l3.jpg">
                </li>
                <li>
                    <img src="images/l4.jpg">
                </li>
            </ul>
        </div>

このスタイルは問題ではありませんが、大きな箱はULは、ULは問題がある場合は、戻ってHTMLを学びたいと思うかもしれボックスモーション、と...まあ、その後、CSSを書くビューポートとして、コンテナの動きを移動する必要があるラップ。

第二部、3つのパラメーター・スタイル

     body {
                margin: 0;
           }
            
     .container {
                width: 100%;
                /* 当子元素不缩放的时候,将会占4个屏幕的宽度,所以需要溢出影藏 */
                overflow: hidden;
            }
            
     .container ul {
                list-style: none;
                margin: 0;
                padding: 0;
                /* 子元素需要运用flex,故将父元素设为flex布局 */
                display: flex;
            }
            
    .container ul li {
    		/*因为父盒子设为flex布局,所有的图片都会在一排缩放进行显示,所以将它们设置为不缩放*/
                flex-shrink: 0;
                width: 100%;
            }
            
    .container img {
                vertical-align: top;
                width: 100%;
            }

スタイルが書き出されている、我々はJSを書く次回は、私のブログには、この機能のパッケージがある、つまり、右計画の機能をスライド左は、ここで説明するのあまりをしない、関数の内部に適用されるJS

ここでは、分析のためのアイデアは、コード分析シャイニング:
取得し、子要素で取得した1.まず大きな箱、すなわちビューポート
2.ここでは、この方法は、要素のdocument.documentElement.clientWidth幅を取得することができます方法を説明します。
3は、図1のカルーセルのインデックスに対応する変数を設定し、
前記摺動距離は、グローバル変数に設定されている
パラメータが決定され使用されるので、画像が可能な場合、最初に、現在の位置を計算する必要がトリガイベントを、スライドしなければなりません私たちは、その後、左右のスライドを使用使用する必要があります前に、バック開始位置、位置プラス現在の摺動距離に、それはこの問題を回避することができ、次回をクリックしたときにドラッグが、問題が発生しました計画のイベントには、画像が滑らかでなくなり、左右のスライド計画が達成するための技術的な難しさ...が存在しないため、新たな問題が浮上している、私はすぐにスライドさせたときに、それは、アニメーションキューで、あまりにも多くの報告をしませんドラッグは、scrollContainer.style.transition =「なし」であり、アニメーションを除去する必要があります。

    <script type="text/javascript">
           //轮播图的当前位置 -index * 一张图片的宽度
      
            var container = document.querySelector('.container');
            var scrollContainer = container.children[0];
            // 屏幕的宽度
            var sw = document.documentElement.clientWidth;
            // 轮播图的索引
            var index = 0;
            // 滑动距离
            var distance = 0;
    
            swipe(container, {
                swipeLeft: function() {
                    // 如果当前的滑动距离超过了屏幕宽度的一半 让他滑动到下一张
                    if (Math.abs(distance) > sw / 2) {
                        if (index < 3) {
                            index++;
                        }
                    }
    
                    // 为滑动添加过渡动画
                    scrollContainer.style.transition = 'transform .6s';
    
                    // 让ul滚动
                    scrollContainer.style.transform = 'translateX(' + -index * sw + 'px)';
                },
                swipeRight: function() {
                    // 如果当前的滑动距离超过了屏幕宽度的一半 让他滑动到下一张
                    if (Math.abs(distance) > sw / 2) {
                        if (index > 0) {
                            index--;
                        }
                    }
    
                    // 为滑动添加过渡动画
                    scrollContainer.style.transition = 'transform .6s';
    
                    // 让ul滚动
                    scrollContainer.style.transform = 'translateX(' + -index * sw + 'px)';
                },
                drag: function(e) {
                    // 滑动距离 e.touches[0].pageX实际上就是moveX
                    distance = e.touches[0].pageX - e.info.startX;
                    // 轮播图的当前位置加上滚动距离
                    var current = -index * sw + distance;
                    // 在手指拖动轮播图的时候禁止过渡动画
                    scrollContainer.style.transition = 'none';
    
                    scrollContainer.style.transform = 'translateX(' + current + 'px)';
                }
            });
    	// 下面为封装好的手势函数
    
            function swipe(el, options) {
    
                var startX = 0;
                var startY = 0;
                var moveX = 0;
                var moveY = 0;
                var disX = 0;
                var disY = 0;
    
                // 没有发生touchmove事件
                var isMove = false;
    
                // 默认值
                var defaults = {
                    swipeLeft: function() {},
                    swipeRight: function() {},
                    swipeDown: function() {},
                    swipeUp: function() {},
                    drag: function() {}
                }
    
                // 如果用户传参了 就用用户传的 如果没传 就用默认值
                // for (var attr in options) {
                // 	defaults[attr] = options[attr];
                // }
    
                // 对象覆盖 用第二个参数对象覆盖第一个参数对象 且覆盖结果会影响到原对象
                Object.assign(defaults, options);
    
                // 记录开始滑动的坐标
                el.addEventListener('touchstart', function(e) {
                    startX = e.touches[0].pageX;
                    startY = e.touches[0].pageY;
                    disX = startX - el.offsetLeft;
                    disY = startY - el.offsetTop;
                });
    
                // 记录滑动过程中的坐标
                el.addEventListener('touchmove', function(e) {
                    moveX = e.touches[0].pageX;
                    moveY = e.touches[0].pageY;
                    isMove = true;
    
                    // 将touchstart事件发生时侯的x和y保存到当前的事件对象中
                    e.info = {
                        startX: startX,
                        startY: startY,
                        disX: disX,
                        disY: disY
                    }
    
                    // 将在touchmove事件发生的时候要做的事情写在函数外面 => drag
                    defaults.drag.call(el, e);
    
                });
    
                // 判断垂直滑动还是水平滑动 ...
                el.addEventListener('touchend', function(e) {
                    // 如果发生了滑动事件
                    if (isMove) {
                        // 水平边长
                        var absX = Math.abs(moveX - startX);
                        // 垂直边长
                        var absY = Math.abs(moveY - startY);
    
                        if (absX > absY) {
                            // 水平
                            // console.log('水平');
    
                            if (moveX - startX > 0) {
                                // console.log('向右滑动');
                                defaults.swipeRight.call(el, e);
    
                            } else {
                                //console.log('向左滑动');
                                defaults.swipeLeft.call(el, e);
                            }
    
                        } else {
                            // 垂直
                            // console.log('垂直');
    
                            if (moveY - startY > 0) {
                                // console.log('向下滑动');
                                defaults.swipeDown.call(el, e);
    
                            } else {
                                // console.log('向上滑动');
                                defaults.swipeUp.call(el, e);
                            }
                        }
    
                    }
                    // 初始isMove变量方便 下回触发事件的时候做判断
                    isMove = false;
    
                });
            }
        </script>

ここで私は私のQQを囲む:2489757828問題、そして、あなたが探索することができ
、私のプライベートのブログ:リダ玄

おすすめ

転載: blog.csdn.net/weixin_43553701/article/details/93387370