• [JavaScript]手机滑动图片


    思路

      1.ul ,li 来装载滑动的图片,超出部分隐藏

      2.滑动是通过改变ul的位置来实现

    布局

    模块

      1: 根据li元素个数去设置ul的宽度

        1.1 获取ul元素

        1.2 获取li元素的个数

        1.3 设置ul元素的宽度

      2: ul实现拖拽移动功能

        Ul元素移动的距离 = 鼠标移动横坐标只差

        Ul元素的新位置 = Ul的位置标 + Ul元素移动的距离

        Ul元素可以通过translateX 来进行动画

        2.1: 获取ul元素的旧位置(触碰ul元素时的translateX)

        2.2: 获取手指触碰的坐标x1

        2.3: 获取手指移动的坐标x2

        2.4: 计算Ul的新位置

        2.5: 设置Ul的位置

    <!doctype html>
    <html lang="en">
    	<head>
    		<meta charset="UTF-8">
    		<meta name="Keywords" content="">
    		<meta name="Description" content="">
    		<title>手机滑动插件swiper</title>
            <style type="text/css">
                *{
                    margin: 0;
                    padding: 0;
                }
                body,
                .content{
                    display: flex;
                    align-items: center;
                     100vw;
                    height: 100vh;
                }
    
                .swiper{
                     100%;
                    height: 100%;
                    overflow: hidden;
                }
                .swiper ul{
                     300%;
                    height: 100%;
                    list-style: none;
                }
                .swiper ul li{
                    display: flex;
                    justify-content: center;
                    align-items: center;
                    float: left;
                     calc( 100% / 3);
                    height: 100%;
                }
                .swiper ul li img{
                    display: block;
                     60%;
                    height: 60%;
                }
    		</style>
    	</head>
    	<body>
    
            <div class="content">
                <div class="swiper">
                    <ul>
                        <li><img src="images/01.jpg" alt=""></li>
                        <li><img src="images/02.jpg" alt=""></li>
                        <li><img src="images/03.jpg" alt=""></li>
                    </ul>
                </div>
            </div>
    
    	</body>
    
    	<script>
            
            var data = {
                oUl : document.querySelector('ul'),
                aLi : document.querySelectorAll('li'),
                time : '0.5s'
            }
    
            swiper(data);
            
            function swiper(data){
                data.oUl.style.width = data.aLi.length+'00%';
    
                for (var index = 0 ; index < data.aLi.length ; index++) {
                    data.aLi[index].style.width = 100/(data.aLi.length)+'%';
                }
                
    
                data.oUl.addEventListener('touchstart',touch);   //当手指触摸屏幕时候触发
                data.oUl.addEventListener('touchmove',touch);    //当手指在屏幕上滑动的时候连续地触发
                data.oUl.addEventListener('touchend',touch);     //当手指从屏幕上离开的时候触发
    
                data.startX = 0; //移动存放初始位置
                data.oUl.transform = {}; //存放transform的变化值
    
                
            };
    
    
            function touch(ev){
                ev = ev || window.event ;   //获取手指事件
    
                switch (ev.type) {
                    case 'touchstart':
                        data.startX = cssTransform(data.oUl,'translateX') || 0 ;
                        x1 = ev.changedTouches[0].pageX;
                        
                        data.oUl.style.transition = '0s';
                        break;
                
                    case 'touchmove':
                        var x2 = ev.changedTouches[0].pageX;
                        var nowX = data.startX + x2 - x1;
                        cssTransform(data.oUl,'translateX',nowX);
    
                        break;
    
                    case 'touchend':    //松开时 图片是拉取还是回撤
                        var offset = data.oUl.transform['translateX'];
                        offset = Math.min( 0 , offset );
                        offset = Math.max( -(data.aLi.length-1) * data.aLi[0].offsetWidth , offset );
                        var num = Math.round( - offset / data.aLi[0].offsetWidth );
                        cssTransform(data.oUl,'translateX',-num*data.aLi[0].offsetWidth);
                        data.oUl.style.transition = data.time;
    
                        break;
                }
            }
    
            /*****
            *@paran:设置或获取一个元素的transform的值
            *@obj:待操作的元素
            *@attr:待操作的属性
            *@var:待设置的值
            *传两个参数是获值,三个参数是这是值
            **/
            function cssTransform(obj , attr , val){
                switch (arguments.length) { //传参的个数
                    case 3:
                        obj.transform[attr] = val;
                        var str = '' ;  //待设置的属性值,拼接而成
                        for (var key in obj.transform) {
                            switch (key) {
                                case 'translate':
                                case 'translateX':
                                case 'translateY':
                                case 'translateZ':
                                    str += key+'('+obj.transform[key]+'px)';
                            }
                        }
                        obj.style.transform = str;
                        break;
                
                    case 2:
                        var val = obj.transform[attr];
                        if ( typeof val === 'undefined' ) {
                            val = 0;
                        }
                        return val;
                        break;
                }
            };
    	
    	
    	</script>
    </html>
    

      

  • 相关阅读:
    Xcode升级7.3 自动补全不提示导入的自定义类解决方案
    workspace & subProject & target
    iOS开发笔记:编译时出现的错误和解决办法
    Apple iOS推送证书配置和生成教程
    UITextField总结--博主总结的真好
    maven库
    数据库事务四种属性
    redis 相关知识
    MySQL索引
    Mybatis 常用标签
  • 原文地址:https://www.cnblogs.com/SoYang/p/9022264.html
Copyright © 2020-2023  润新知