js实现上下滑动轮播

 更新时间:2022年07月13日 14:29:31   作者:南初️  
这篇文章主要为大家详细介绍了js实现上下滑动轮播,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了js实现上下滑动轮播的具体代码,供大家参考,具体内容如下

一、效果图

二、设计思路

第一步:遍历所有的元素使得鼠标点击右侧小图时,图片变亮并且根据偏移值加上红框。点击右边的小图左边出现对用的图片。

第二步:利用循环计时器,克隆ul里面的第一个元素使得连续循环滑动。

第三步:鼠标进入时循环滑动停止,离开时继续。

第四步:设置上下按钮,当第一张图片的offsetTop值为0时,下面按钮出现,当到达底部最后一个元素时,上面按钮出现,底部按钮消失,当在整个元素中间时,上下按钮都出现,每点击一次按钮移动一个格子,左边图片也对应改变。

三、核心代码

//找到right-btn 元素添加事件
var righttBtnList;
var Line;
var transy = 0;
var liHeight = 430;
var ulItem;
var count = 0;
var timer;
var speed = 2000;
var Item;
var ItemMenu;
var offsetTop = 0;
var itemtabinfo, topBtn, bottomBtn;
    window.onload = function () {
        righttBtnList = document.getElementsByClassName("right-btn");
        Line = document.getElementsByClassName("line")[0];
        ulItem = document.getElementsByClassName("item-child-ul")[0];
        Item = document.getElementsByClassName("item-list")[0];
        ItemMenu = document.getElementsByClassName("item-menu")[0];
        itemtabinfo = document.getElementsByClassName("item-tab-info")[0];
        topBtn = document.getElementsByClassName("top-btn")[0];
        bottomBtn = document.getElementsByClassName("bottom-btn")[0];
        //默认复制第一张添加到ulItem之中
        ulItem.appendChild(ulItem.children[0].cloneNode(true));
        //设置itemtabinfo 默认移动值
        itemtabinfo.style.transform = "translateY(" + offsetTop + "px)";
        //直接默认启动计时器
        Animate();
        //遍历所有的li添加事件
        for (var i = 0; i < righttBtnList.length; i++) {
            righttBtnList[i].index = i;
            righttBtnList[i].onclick = function () {
                //点击当前移除top-white
                if (checkClass(this, 'top-white')) {
                    this.classList.remove("top-white");
                    //其余的添加
                    addWhite(this.index);
                }
                //获取偏移值
                Line.style.top = ((this.index * 110 + 10) + offsetTop) + "px";
                //输出当前点击的索引
                ulItem.style.transform = "translateY(" + (-this.index * liHeight) + "px)";
                //用户点击的索引  对应count值
                count = this.index;
            }
        }

        Item.onmouseenter=function(){
            clearTimeout(timer);
        }
        Item.onmouseleave=function(){
            Animate();
        }
        topBtn.onclick = function () {
            offsetTop += 110;
            //获取原来的top
            var oldTop = parseFloat(Line.style.top);
            Line.style.top = (oldTop + 110) + "px";
            itemtabinfo.style.transform = "translateY(" + offsetTop + "px)";
            checkBtnShow();
        }
        bottomBtn.onclick = function () {
            offsetTop -= 110;
            //获取原来的top
            var oldTop = parseFloat(Line.style.top);
            //只能取到行内样式
            Line.style.top = (oldTop - 110) + "px";
            itemtabinfo.style.transform = "translateY(" + offsetTop + "px)";
            checkBtnShow();
        }

        ItemMenu.onmouseenter = function () {
            checkBtnShow();
        }
        function checkBtnShow() {
            if (offsetTop == 0) {
                //下面按钮出现
                bottomBtn.classList.add("showBottom");
                topBtn.classList.remove("showTop");

            }
            else if (offsetTop == -220) {
                //上面按钮出现
                topBtn.classList.add("showTop");
                bottomBtn.classList.remove("showBottom");
            } else {
                //两个按钮同时出现
                bottomBtn.classList.add("showBottom");
                topBtn.classList.add("showTop");
            }
        }

        ItemMenu.onmouseleave = function () {
            bottomBtn.classList.remove("showBottom");
            topBtn.classList.remove("showTop");
        }
        //检测是否具有top-white
        function checkClass(obj,className){
            return obj.classList.contains(className);
        }
        //其余的li添加
        function addWhite(index){
            for(var i=0;i<righttBtnList.length;i++){
                if(i!=index){
                    righttBtnList[i].classList.add("top-white");
                }
            }
        }
        //启动计时器动画
        function Animate(){
            //写执行代码
            timer=setInterval(function(){
                if (timer)
                    clearInterval(timer);
                if(!ulItem.classList.contains("transY")){
                    ulItem.classList.add("transY");
                }
                count++;
                ulItem.style.transform="translateY("+(-count*liHeight)+"px)";
                //找出当前每一张图动画完成时间
                setTimeout(function(){
                    if(count>=ulItem.children.length-1){
                        count=0;
                        //移除过渡类
                        ulItem.classList.remove("transY");
                        ulItem.style.transform="translateY(0px)";
                    }
                    //让右边的元素动画对应
                    //rigthBtnlist[count].click();
                },500)
            },speed)
        }
    } 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • layui时间控件选择时间范围的实现方法

    layui时间控件选择时间范围的实现方法

    今天小编就为大家分享一篇layui时间控件选择时间范围的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • 微信小程序自定义弹框效果

    微信小程序自定义弹框效果

    这篇文章主要为大家详细介绍了微信小程序自定义弹框效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • JS代码判断IE6,IE7,IE8,IE9的函数代码

    JS代码判断IE6,IE7,IE8,IE9的函数代码

    JS代码判断浏览器版本,支持IE6,IE7,IE8,IE9!做网页有时候会用到JS检测IE的版本,下面是检测Microsoft Internet Explorer版本的三种代码
    2013-08-08
  • JavaScript判断对象和数组的两种方法

    JavaScript判断对象和数组的两种方法

    这篇文章主要介绍了JavaScript判断对象和数组的两种方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • 自定义滚动条3.0

    自定义滚动条3.0

    图片自定义滚动条3.0(Duma“自动渲染版”,也许世间万物都会变,但是真挚的爱,却永远留存在心中!)
    2009-07-07
  • 原生JS实现平滑回到顶部组件

    原生JS实现平滑回到顶部组件

    返回顶部组件是一种极其常见的网页功能,需求简单:页面滚动一定距离后,显示返回顶部的按钮,点击该按钮可以将滚动条滚回至页面开始的位置,接下来通过本文给大家介绍原生JS实现平滑回到顶部组件,需要的朋友参考下吧
    2016-03-03
  • js split函数用法总结(从入门到精通)

    js split函数用法总结(从入门到精通)

    js split就是将一字符串以特定的字符分割成数组,数组一般是字符串处理比较常用的处理方法
    2013-03-03
  • 5个让你眼前一亮的JavaScript装饰器技巧

    5个让你眼前一亮的JavaScript装饰器技巧

    JavaScript 装饰器是一种特殊的功能,允许在不修改源代码的情况下动态修改类和函数的行为,本文将介绍五个让你眼前一亮的装饰器技巧,包括装饰函数参数、装饰类属性、装饰函数返回值和装饰函数调用,需要的朋友可以参考下
    2023-06-06
  • JavaScript 继承详解(六)

    JavaScript 继承详解(六)

    在本章中,我们将分析Prototypejs中关于JavaScript继承的实现,需要的朋友可以参考下
    2016-10-10
  • 一篇文章掌握RequireJS常用知识

    一篇文章掌握RequireJS常用知识

    一篇文章掌握RequireJS常用知识,通过本文,你可以对模块化开发和AMD规范有一个较直观的认识,并详细地学习RequireJS这个模块化开发工具的常见用法,感兴趣的小伙伴们可以参考一下
    2016-01-01

最新评论