原生javascript实现图片按钮切换

 更新时间:2015年01月12日 10:38:52   投稿:hebedich  
这篇文章主要介绍了原生javascript实现图片按钮切换,需要的朋友可以参考下

先给大家看下效果展示图

以下为详细代码:

复制代码 代码如下:

function LGY_picSwitch(option){
    this.oWrap = this.getId(option.wrapID); //最外层元素
    this.olistWrap = this.getNodeByClassname(this.oWrap,'gy_picSwitch_listWrap')[0];
    this.oUl = this.olistWrap.getElementsByTagName('ul')[0];
    this.oBtnPrev = this.getNodeByClassname(this.oWrap,'gy_picSwitch_prev')[0];
    this.oBtnNext = this.getNodeByClassname(this.oWrap,'gy_picSwitch_next')[0];
    this.nLen = this.oUl.getElementsByTagName('li').length; //图片总数
    this.nScollCount = option.scrollCount; //每次滚动的数量
    this.nScollLen = Math.ceil(this.nLen/option.scrollCount); // 切换判断的最大值
    this.nSwitchWidth = 0; //每次切换移动的距离,在代码里面动态获取值
    this.nIndex = 0; //切换图片的当前索引
    this.timer = null; //切换图片的引值
    this.int();
}
LGY_picSwitch.prototype = {
    getId:function(id){
        return document.getElementById(id);
    },
    getNodeByClassname:function(parent,classname){
        var classElements = new Array();
        var els = parent.getElementsByTagName('*');
        var elsLen = els.length;
        var pattern = new RegExp("(^|\\s)"+classname+"(\\s|$)");
        for (i = 0, j = 0; i < elsLen; i++) {
                if ( pattern.test(els[i].className) ) {
                        classElements[j] = els[i];
                        j++;
                }
        }
        return classElements;
    },
    getCss:function(node,value)
    {
        return node.currentStyle?node.currentStyle[value]:getComputedStyle(node,null)[value];
    },
    setCss:function(node,val){
        for(var v in val){
            node.style.cssText += ';'+ v +':'+val[v];
        }
    },
    moveFn:function(node,value,targetValue,callback){
        var _that = this;
        clearInterval(this.timer);
        this.timer = setInterval(function()
        {
            var val = parseFloat(_that.getCss(node,value));
            var speed = ( targetValue- val )/8;
            speed = speed>0?Math.ceil(speed):Math.floor(speed);
            if(speed ==0)
            {
                clearInterval(_that.timer);
                callback&&callback();
            }
            else
            {                   
                node.style[value] = ( val + speed ) +'px';                   
            }
           
        },20);
    },
    picChange:function(){
        this.moveFn(this.oUl,'marginLeft',-this.nIndex*this.nSwitchWidth);
    },
    cancelBubble:function(e){
        e.stopPropagation?e.stopPropagation():e.cancelBubble = true;
    },
    btnIsShow:function(){
        this.setCss(this.oBtnNext,{'display':'block'});
        this.setCss(this.oBtnPrev,{'display':'block'});
        if( this.nIndex == 0 ) this.setCss(this.oBtnPrev,{'display':'none'});
        if( this.nIndex ==(this.nScollLen-1) ) this.setCss(this.oBtnNext,{'display':'none'});
    },
    btnPrev:function(){
        var _that = this;
        this.oBtnPrev.onclick = function(e){
            var e = e || window.event;
            _that.cancelBubble(e);
            if(_that.nIndex != 0 ) {
                _that.nIndex--;
                _that.picChange();
                _that.btnIsShow();
            }
        }
    },
    btnNext:function(){
        var _that = this;
        this.oBtnNext.onclick = function(e){
            var e = e || window.event;
            _that.cancelBubble(e);
            if(_that.nIndex != (_that.nScollLen-1) ) {
                _that.nIndex++;
                _that.picChange();
                _that.btnIsShow();
            }
        }
    },
    int:function(){
        //动态获取移动的宽度
        var oLi = this.oUl.getElementsByTagName('li')[0],
            oLi_w = oLi.offsetWidth + parseInt(this.getCss(oLi,'marginLeft')) + parseInt(this.getCss(oLi,'marginRight'));
        this.nSwitchWidth = oLi_w*this.nScollCount;
        //按钮显示初始化
        this.btnIsShow();
        //左右切换
        this.btnPrev();
        this.btnNext();
    }
}

 
 HTML代码:
复制代码 代码如下:

/*
* HTML结构必需是以下:外层ID名,自己传入 如下面的:id="gy_picSwitch02" ,ID名,自己随便给
但,里面的结构必需一样,包括类名classname
<div id="gy_picSwitch02">
    <span class="gy_picSwitch_prev"></span>
    <span class="gy_picSwitch_next"></span>
    <div class="gy_picSwitch_listWrap">
        <ul>
            <li><img src="images/pic01.jpg" alt=""></li>
            <li><img src="images/pic02.jpg" alt=""></li>
            <li><img src="images/pic03.jpg" alt=""></li>
            <li><img src="images/pic04.jpg" alt=""></li>
            <li><img src="images/pic05.jpg" alt=""></li>
            <li><img src="images/pic06.jpg" alt=""></li>
            <li><img src="images/pic07.jpg" alt=""></li>
            <li><img src="images/pic08.jpg" alt=""></li>
        </ul>
    </div>
</div>

参数:'wrapID':'xxxx',最外层的ID名
      'scrollCount':5,滚动的数量  

复制代码 代码如下:
  
*
*/
//实例化
 new LGY_picSwitch({'wrapID':'gy_picSwitch','scrollCount':5});

是不是很方便的功能呢,使用也很简单,这里推荐给小伙伴,希望对大家能有所帮助

相关文章

  • javascript抖动元素的小例子

    javascript抖动元素的小例子

    这篇文章介绍了javascript抖动元素的小例子,有需要的朋友可以参考一下
    2013-10-10
  • JavaScript中split() 使用方法汇总

    JavaScript中split() 使用方法汇总

    本文向大家重点讲解一下Javascript中split函数使用,它可以将一个字符串分割为子字符串,然后将结果作为字符串数组返回,相信本文介绍你对split函数的用法有明确的认识。
    2015-04-04
  • javascript实现移动端 HTML5 图片上传预览和压缩功能示例

    javascript实现移动端 HTML5 图片上传预览和压缩功能示例

    这篇文章主要介绍了javascript实现移动端 HTML5 图片上传预览和压缩功能,结合实例形式分析了javascript移动端 HTML5 图片上传预览和压缩功能具体实现方法与操作注意事项,需要的朋友可以参考下
    2020-05-05
  • javascript 模拟JQuery的Ready方法实现并出现的问题

    javascript 模拟JQuery的Ready方法实现并出现的问题

    今天在阅读网上一些模拟Jq的ready方法时,发现一些小细节,就是网上的ready事件大部分都是在onload事件执行后加载,而jquery确能在onload加载前。
    2009-12-12
  • javascript变量提升和闭包理解

    javascript变量提升和闭包理解

    本篇文章给大家详细分析了javascript变量提升和闭包的相关知识点,对此有兴趣的朋友可以参考下。
    2018-03-03
  • JS运动特效之任意值添加运动的方法分析

    JS运动特效之任意值添加运动的方法分析

    这篇文章主要介绍了JS运动特效之任意值添加运动的方法,结合实例形式分析了javascript针对多物体运动通过参数控制不同运动效果的实现方法,需要的朋友可以参考下
    2018-01-01
  • 前端使用websocket发送消息的示例代码

    前端使用websocket发送消息的示例代码

    WebSocket是一种在单个TCP连接上进行全双工通信的协议,它可以让客户端和服务器之间进行实时的双向通信,这篇文章主要介绍了前端使用websocket发送消息的示例代码,需要的朋友可以参考下
    2023-07-07
  • JavaScript判断空值、NULL、undefined的方法对比

    JavaScript判断空值、NULL、undefined的方法对比

    JavaScript五种原始类型(boolean、number、string、null、undefined)中的一种。在鉴别JavaScript原始类型的时候我们会用到typeof操作符。Typeof操作符可用于字符串、数字、布尔和未定义类型。
    2022-12-12
  • BootStrap daterangepicker 双日历控件

    BootStrap daterangepicker 双日历控件

    这篇文章主要介绍了BootStrap daterangepicker 双日历控件,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-06-06
  • JavaScript 冒泡排序和选择排序的实现代码

    JavaScript 冒泡排序和选择排序的实现代码

    本文通过实例代码给大家介绍了js冒泡排序和选择排序的实现代码,代码简单易懂,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-09-09

最新评论