原生javascript实现图片按钮切换


Posted in Javascript onJanuary 12, 2015

先给大家看下效果展示图

原生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 相关文章推荐
禁止IE用右键的JS代码
Dec 30 Javascript
javascript setinterval 的正确语法如何书写
Jun 17 Javascript
javascript字符串循环匹配实例分析
Jul 17 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
Aug 26 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
Nov 24 Javascript
javascript基础语法——全面理解变量和标识符
Jun 02 Javascript
Centos7 中安装 Node.js v4.4.4
Nov 03 Javascript
浅谈vue-router 路由传参的方法
Dec 27 Javascript
基于vue cli 通过命令行传参实现多环境配置
Jul 12 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
Aug 17 Javascript
vue中格式化时间过滤器代码实例
Apr 17 Javascript
解决vue项目获取dom元素宽高总是不准确问题
Jul 29 Javascript
原生javascript实现图片滚动、延时加载功能
Jan 12 #Javascript
DOM节点的替换或修改函数replaceChild()用法实例
Jan 12 #Javascript
原生javascript实现Tab选项卡切换功能
Jan 12 #Javascript
推荐4个原生javascript常用的函数
Jan 12 #Javascript
原生js实现日期联动
Jan 12 #Javascript
Javascript中innerHTML用法实例分析
Jan 12 #Javascript
js实现从数组里随机获取元素
Jan 12 #Javascript
You might like
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
解析yahoo邮件用phpmailer发送的实例
2013/06/24 PHP
PHP APC缓存配置、使用详解
2014/03/06 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
php解决DOM乱码的方法示例代码
2016/11/20 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
window.location.href中url中数据量太大时的解决方法
2013/12/23 Javascript
jQuery实现当按下回车键时绑定点击事件
2014/01/28 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
利用Javascript实现简单的转盘抽奖
2017/02/13 Javascript
JavaScript实现简单的四则运算计算器完整实例
2017/04/28 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
JavaScript事件冒泡与事件捕获实例分析
2018/08/01 Javascript
javascript面向对象程序设计实践常用知识点总结
2019/07/29 Javascript
Nodejs封装类似express框架的路由实例详解
2020/01/05 NodeJs
python使用datetime模块计算各种时间间隔的方法
2015/03/24 Python
Python输出9*9乘法表的方法
2015/05/25 Python
python定时检测无响应进程并重启的实例代码
2019/04/22 Python
python程序控制NAO机器人行走
2019/04/29 Python
django中的图片验证码功能
2019/09/18 Python
IntelliJ 中配置 Anaconda的过程图解
2020/06/01 Python
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
国际奢侈品品牌童装购物网站:Designer Childrenswear
2019/05/08 全球购物
企业总经理助理岗位职责
2014/09/12 职场文书
大学教师个人总结
2015/02/10 职场文书
2015年保育员个人工作总结
2015/05/13 职场文书
《黄山奇石》教学反思
2016/02/18 职场文书
CSS filter 有什么神奇用途
2021/05/25 HTML / CSS
python库sklearn常用操作
2021/08/23 Python
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA
app场景下uniapp的扫码记录
2022/07/23 Java/Android