自己写了一个javascript的可循环轮播图,支持手机滑动,不过代码着实小白,全局变量,函数调用满天飞,研究别的代码规范好的轮播图插件,表示看得懂但是写不出。。

HTML:

<div id="main" >
    <!--轮播图片或背景-->
    <div class="bigbox">
        <ul id="listCont">
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
       </ul>
    </div>
</div>
<!--页数按钮-->
<div id="pageBtn">
    <a class="active">one</a>
    <a >two</a>
    <a >three</a>
    <a >four</a>
    <a >five</a>
</div>
<!--前后按钮-->
<div id="pnBtn">
    <a class="prev" > < <span></span></a>
    <a class="next" > > <span></span></a>
</div>

JS:

document.addEventListener('touchmove', function(event) {
    event.preventDefault();
 }, false);
//touchstart事件
function touchstartFunc(evt) {
    try {
        //evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等
        var touch = evt.touches[0]; //获取第一个触点
        var x = Number(touch.pageX); //页面触点X坐标
         var y = Number(touch.pageY); //页面触点Y坐标
         //记录触点初始位置
        startX = x;
        startY = y;
    } catch (e) {
        alert('touchstartFunc:' + e.message);
    }
}

//touchmove事件,这个事件无法获取坐标
function touchMoveFunc(evt) {
    //touchstartFunc(evt);
    try {
         //evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等
        var touch = evt.touches[0]; //获取第一个触点
        var x = Number(touch.pageX); //页面触点X坐标
        var y = Number(touch.pageY); //页面触点Y坐标
        //document.getElementById("main").innerHTML = "原:"+startY+" "+"现:"+y;
        //判断滑动方向
        if (x - startX > 50) {
            swipeRight();
           //alert("向右划");
        } else if(x - startX < -50){
            swipeLeft();
       }
    } catch (e) {
        alert('touchMoveFunc:' + e.message);
    }
}

//touchend事件
function touchEndFunc(evt) {
    try {
        //evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等
    } catch (e) {
        alert('touchEndFunc:' + e.message);
    }
}

document.getElementById("main").addEventListener('touchstart', touchstartFunc, false);
document.getElementById("main").addEventListener('touchmove', touchMoveFunc, false);
document.getElementById("main").addEventListener('touchend', touchEndFunc, false);

//页数按钮
var pageBtn = document.getElementById("pageBtn");
var pageList = document.getElementById("pageBtn").getElementsByTagName("a");

//前后按钮
var pnBtn = document.getElementById("pnBtn");
var pnList = document.getElementById("pnBtn").getElementsByTagName("a");
var prev = getByClass("prev","a",pnBtn);
var next = getByClass("next","a",pnBtn);

//轮播内容
var main = document.getElementById("main");//main content
var list = document.getElementById("main").getElementsByTagName('li');
var listCont = document.getElementById("listCont");//轮播列表
del_ff(listCont);
var count = list.length;
var listWidth = main.offsetWidth;
listCont.style.marginLeft = -listWidth + "px";

//将first子元素复制到列表尾,last复制到列表头
var f = listCont.firstChild.cloneNode(true);
var l = listCont.lastChild.cloneNode(true);
listCont.appendChild(f);
listCont.insertBefore(l,listCont.firstChild);

// main.addClass("trans");
main.className = "trans";
var time = setInterval("turn(-2)",5000);

//getElementsByClass
function getByClass(classname, tagname, parent){
    var result=[],
   _array=parent.getElementsByTagName(tagname);
    for(var i=0,j=_array.length;i<j;i++){
        if((new RegExp("(?:^|\\s+)"+classname+"(?:\\s+|$)")).test(_array[i].className)){
            result.push(_array[i]);
        }
    }
    return result;
}

//解决FF和chrome下把换行也当作子元素的bug
function del_ff(elem){
    var elem_child = elem.childNodes;
    for(var i=0; i<elem_child.length;i++){
        if(elem_child[i].nodeName == "#text" && !/\s/.test(elem_child.nodeValue)) {
            elem.removeChild(elem_child[i]);
        }
    }
}

//自适应宽度
for(var i=0;i<list.length;i++){
    list[i].index = i;
    list[i].style.width = listWidth+'px';
}

//turn
var timer = null;
function turn(dir){

    var flag = Math.abs(parseInt(listCont.style.marginLeft))/main.offsetWidth;

    if(dir == -1){ //前一张
        if(flag == 0){//flag = 0,在第一张并且要到前一张
            var tim = null;
            flag = list.length-3;
            listCont.className = "";
            tim = setTimeout(function(){
                listCont.style.marginLeft = -(flag+1)*listWidth + "px";
            },0)
        }else if(flag>0){
            flag--;
            }
       }else if(dir == -2){ //后一张
           if (flag < list.length-1 ) {
           flag++;
       }else{
           var tim = null;
           flag = 2;
           listCont.className = "";
           tim = setTimeout(function(){
               listCont.style.marginLeft = -listWidth + "px";
           },0)
        }
    }else{
         flag = dir;
}

clearTimeout(timer);
timer = setTimeout(function(){
    listCont.className = "trans";
    listCont.style.marginLeft = -flag*listWidth + "px";
},100)

//按钮激活
for(var i=0 ;i<pageList.length;i++){
    var index = flag;
    pageList[i].className=" ";
    if(index == 0) index = 5;
    else if(index == 6) index = 1;
    pageList[index-1].className="active";
}


}//turn end

//点击按钮翻页
for(var i=0 ;i<pageList.length;i++){
    pageList[i].index = i+1;
    pageList[i].onclick = function(){
        clearInterval(time);
        turn(this.index);
        time = setInterval("turn(-2)",5000);
    }
}

//前后按钮翻页
prev[0].onclick = function(){
    swipeRight();
}
next[0].onclick = function(){
    swipeLeft();
}

//右划 == 前一张
function swipeRight(){
    clearInterval(time);
    var dir = -1;
    turn(dir);
    time = setInterval("turn(-2)",5000);
}

//左划 == 下一张
function swipeLeft(){
    clearInterval(time);
    var dir = -2;
    turn(dir);
    time = setInterval("turn(-2)",5000);
}

js 自适应手机电脑 轮播图的更多相关文章

  1. 原生JS面向对象思想封装轮播图组件

    原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能 ...

  2. 基于js的自适应、多样式轮播图插件(兼容IE8+、FF、chrome等主流浏览器)

    插件github地址:https://github.com/pomelott/slider-plug_in 使用方式: slider plug-in 左右滑动的自适应.多样式全能插件.多次调用时只需传 ...

  3. 原生js实现响应式轮播图,支持电脑端点击切图,手机端滑动切图

    轮播图的实现原理并不难,但是步骤有些繁琐.最近练习了一个轮播图,大部分是跟着网上的教程写的,然后自己做了一点兼容ie8的修改,加了点击切换图片的特效和手机端的滑动特效,让这个轮播图可以在响应式的网站中 ...

  4. js原生代码实现轮播图案例

    一.轮播图是现在网站网页上最常见的效果之一,对于轮播图的功能,要求不同,效果也不同! 我们见过很多通过不同的方式,实现这一效果,但是有很多比较麻烦,而且不容易理解,兼容性也不好. 在这里分享一下,用j ...

  5. 用html +js+css 实现页面轮播图效果

    html 页面 <html lang="en"> <head> <meta charset="UTF-8"> <met ...

  6. js访3d上下轮播图

    js/css访3d上下轮播图 (附件) <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...

  7. 用js和jQuery做轮播图

    Javascript或jQuery做轮播图 css样式 <style> a{ text-decoration:none; } .naver{ width: 100%; position:r ...

  8. JS框架_(Bootstrap.js)实现简单的轮播图

    Bootstrap框架中 轮播(Carousel)插件是一种灵活的响应式的向站点添加滑块的方式 轮播图效果: <!DOCTYPE html> <html> <head&g ...

  9. 原生js写一个无缝轮播图插件(支持vue)

    轮播图插件(Broadcast.js) 前言:写这个插件的原因 前段时间准备用vue加上网易云的nodejs接口,模拟网易云音乐移动端.因为想自己写一遍所有的代码以及加固自己的flex布局,所以没有使 ...

随机推荐

  1. 更改MySQL 5.7的数据库的存储位置

    操作系统:Windows 10 x64 MySQL安装包版本:mysql-installer-community-5.7.17.0 参考:MySQL 5.7版本的安装使用详细教程+更改数据库data的 ...

  2. JS/TS 对数组中的对象按对象的值进行去重

    举个例子:对以下数组按 lastName 的值进行去重 let listData = [ { firstName: "Rick", lastName: "Sanchez& ...

  3. 深入研究RocketMQ消费者是如何获取消息的

    前言 小伙伴们,国庆都过的开心吗?国庆后的第一个工作日是不是很多小伙伴还沉浸在假期的心情中,没有工作状态呢? 那王子今天和大家聊一聊RocketMQ的消费者是如何获取消息的,通过学习知识来找回状态吧. ...

  4. git pull设置为无需密码

    https方式每次都要输入密码,按照如下设置即可输入一次就不用再手输入密码的困扰而且又享受https带来的极速 设置记住密码(默认15分钟): git config --global credenti ...

  5. axio跨域请求,vue中的config的配置项。

    这是我用 vue cli 脚手架搭建的跨域.以上是可以请求到的.

  6. MacBook连接蓝牙鼠标、蓝牙键盘失败的解决方案

    问题: keychron k4连接不上MacBook,但是win10和iPhone都可以成功连接. 解决方法: 1.关闭wifi: 2.连接蓝牙键盘: 3.稍等一会,再连接wifi就可以了. 另外,苹 ...

  7. MeteoInfoLab脚本示例:Maskout图形

    Maskout通常有两种类型:Maskout图形和Maskout数据.这里是Maskout图形的示例.需要用shaperead读取地图数据形成图层作为Maskout图层(这里是中国的行政区域china ...

  8. Android开发Settings源码分析之主界面加载(二)

    现在都说互联网寒冬,其实只要自身技术能力够强,咱们就不怕!我这边专门针对Android开发工程师整理了一套[Android进阶学习视频].[全套Android面试秘籍].[Android知识点PDF] ...

  9. 【Linux教程】Linux系统零基础编程入门,想当大神?这些你都要学

    ✍ 文件和文件系统 文件是Linux系统中最重要的抽象,大多数情况下你可以把linux系统中的任何东西都理解为文件,很多的交互操作其实都是通过文件的读写来实现的. 文件描述符 在Linux内核中,文件 ...

  10. 【UR #12】实验室外的攻防战

    UOJ小清新题表 题目内容 依然没有粘题面主要是UOJ的题面都太长了qwq UOJ链接 一句话题意:给出两个序列 \(A\) 和 \(B\),对于 \(A\) 进行若干次操作,每次给出一个 \(i\) ...