原生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 相关文章推荐
js tab效果的实现代码
Dec 26 Javascript
JavaScript动态创建form表单并提交的实现方法
Dec 10 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
Oct 25 Javascript
JS简单实现表格排序功能示例
Dec 20 Javascript
canvas实现爱心和彩虹雨效果
Mar 09 Javascript
简单实现js鼠标跟随效果
Aug 02 Javascript
jQuery插件DataTables分页开发心得体会
Aug 22 jQuery
vue的mixins属性详解
Mar 14 Javascript
Vue中在新窗口打开页面及Vue-router的使用
Jun 13 Javascript
vue构建动态表单的方法示例
Sep 22 Javascript
Echart折线图手柄触发事件示例详解
Dec 16 Javascript
利用Angular2的Observables实现交互控制的方法
Dec 27 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
删除数组元素实用的PHP数组函数
2008/08/18 PHP
php addslashes和mysql_real_escape_string
2010/01/24 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
2012/09/05 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
2014/08/20 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
一些常用的Javascript函数
2006/12/22 Javascript
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
2013/12/18 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
纯js模拟div层弹性运动的方法
2015/07/27 Javascript
javascript实现拖放效果
2015/12/16 Javascript
JS简单获取及显示当前时间的方法
2016/08/03 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
vue使用pdfjs显示PDF可复制的实现方法
2018/12/14 Javascript
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
微信小程序图片右边加两行文字的代码
2020/04/23 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python实现的简单猜数字游戏
2015/04/04 Python
python实现一次创建多级目录的方法
2015/05/15 Python
Python实现合并两个有序链表的方法示例
2019/01/31 Python
linux安装python修改默认python版本方法
2019/03/31 Python
pip install python 快速安装模块的教程图解
2019/10/08 Python
推荐10个CSS3 制作的创意下拉菜单效果
2014/02/11 HTML / CSS
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
护理专业毕业生自我鉴定
2013/10/08 职场文书
2014年大学庆元旦迎新年活动方案
2014/03/09 职场文书
丧事主持词大全
2014/04/02 职场文书
学生自我鉴定格式及范文
2014/09/16 职场文书
通知格式
2015/04/27 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
股东合作协议书模板2篇
2019/11/05 职场文书
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android