文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

react怎么实现手机端首页无缝轮播功能

2023-06-05 13:40

关注

本篇内容主要讲解“react怎么实现手机端首页无缝轮播功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“react怎么实现手机端首页无缝轮播功能”吧!

touchstart = this.touchStart.bind(this);    touchmove = this.touchMove.bind(this);    touchend = this.touchEnd.bind(this);    //设置transform    cssTransform(ele, attr, val){        if(!ele.transform){            ele.transform = {};        };        //当传入值时对属性进行设置。        if(arguments.length > 2){            ele.transform[attr] = val;            var sval = '';            for(var s in ele.transform){                if(s === 'translateX'){                    sval += s + '(' + ele.transform[s] + 'px)';                }                //如果实在不理解,可以console.log(sval)可以看到到最后一张时会有一个先跳到第二张再快速到第三张的过程                ele.style.WebkitTransform = ele.style.transform = sval;            }        }        else{            val = ele.transform[attr];            if(typeof val === 'undefined'){                if(attr === 'translateX'){                    val = 0;                }            };            return val;        }    }    //自动轮播    auto(){        clearInterval(this.timer);        this.timer = setInterval(() => {            //当到达最后一张时            if(this.now === this.props.len - 1){                this.now = this.props.len / 2 - 1;                //这两句代码很重要,是实现的关键,none是为了不出现平移而是直接跳变                this.LunBoEle.style.transition = 'none';                this.cssTransform(this.LunBoEle, 'translateX', - this.now * this.sliderWidth);            }    //定时是为了tab函数中执行的csstransform函数与上面到达最后一张时的csstransform有先后,不然仍会导致右移;            setTimeout(() => {                 this.now++;                this.tab();            }, 30);        }, this.props.delay * 1000);    }    tab(){        this.LunBoEle.style.transition = '.5s';        this.cssTransform(this.LunBoEle, 'translateX', -this.now * this.sliderWidth);        let SelectIndex = this.now % (this.props.len / 2);        $('.slider-dots-wrap span').eq(SelectIndex).addClass('slider-dot-selected').siblings().removeClass('slider-dot-selected');    }    componentDidMount() {        this.LunBoEle = document.querySelector('ul.lunbo');        this.SliderEle = document.querySelector('.slider');        this.sliderWidth = $('.slider').width();        this.cssTransform(this.LunBoEle, 'translateX', 0);        this.auto.bind(this)();        this.SliderEle.addEventListener('touchstart', this.touchstart, false);        this.SliderEle.addEventListener('touchmove', this.touchmove, false);        this.SliderEle.addEventListener('touchend', this.touchend, false);    }//触发    touchStart(e: TouchEvent){        e.stopPropagation();        if(!this.stopped){            clearInterval(this.timer);            this.LunBoEle.style.transition = 'none';            let moveX = this.cssTransform.bind(this)(this.LunBoEle, 'translateX');                this.now = Math.round(-moveX / this.sliderWidth);            if(this.now === 0){                this.now = this.props.len / 2;            }else if(this.now === this.props.len - 1){                this.now = this.props.len / 2 - 1;            }            this.cssTransform(this.LunBoEle, 'translateX', -this.now * this.sliderWidth);            this.startPoint = e.changedTouches[0].pageX;            this.startEle = this.cssTransform.bind(this)(this.LunBoEle, 'translateX');        }    };//移动    touchMove(e: TouchEvent){        e.preventDefault();        e.stopPropagation();        if(!this.stopped){            let endPoint = e.changedTouches[0].pageX;            let disX = endPoint - this.startPoint;            this.cssTransform.bind(this)(this.LunBoEle, 'translateX', disX + this.startEle);        }    }//平移结束    touchEnd(e: TouchEvent){        e.stopPropagation();        if(!this.stopped){            let moveX = this.cssTransform.bind(this)(this.LunBoEle, 'translateX');            //这边我是对移动做了判断            if(Math.abs(moveX) > Math.abs(this.now * this.sliderWidth)){                this.now = Math.ceil(-moveX / this.sliderWidth);            }else{                this.now = Math.floor(-moveX / this.sliderWidth);            }            this.tab.bind(this)();            this.auto.bind(this)();        }    }    componentWillUnmount(){        //注意这边的清楚很重要,因为用户在使用时如果后台修改,用户刷新,会导致下面的dot出现问题        clearInterval(this.timer);        //卸载的同时需要将所有事件清除掉        this.SliderEle.removeEventListener('touchstart', this.touchstart, false);        this.SliderEle.removeEventListener('touchmove', this.touchmove, false);        this.SliderEle.removeEventListener('touchend', this.touchend, false);    }    //防止如果只有一张轮播图时进行轮播    componentDidUpdate(){        if((this.props.len / 2) === 1){            clearInterval(this.timer);            this.stopped = true;        }        else{            this.stopped = false;        }    }    render() {        let itemNodes = this.props.items.map((item, idx) => {            return <SliderItem item={item} count={this.props.len} key={'item' + idx} />;        });        let dotNodes = [];        let count = this.props.len / 2;        for(let i = 0; i < count; i++){            //为第一个dot点加上selected            dotNodes[i] = (                <span key={'dot' + i} className={'slider-dot' + (i === 0 ? ' slider-dot-selected' : '')}>                </span>            );        }        return (            <div className="slider">                <ul className="lunbo" style={{width: (this.props.len) * 100 + '%'}}>                    {itemNodes}                </ul>                <div className="slider-dots-wrap">                    {dotNodes}                </div>            </div>

到此,相信大家对“react怎么实现手机端首页无缝轮播功能”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯