原生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 相关文章推荐
jQuery 打造动态渐变按钮 详细图文教程
Apr 25 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
Aug 02 Javascript
深入分析Javascript事件代理
Jan 30 Javascript
更高效的使用JQuery 这里总结了8个小技巧
Apr 13 Javascript
深入浅析JavaScript中的scrollTop
Jul 11 Javascript
switch语句的妙用(必看篇)
Oct 03 Javascript
JavaScript实现的微信二维码图片生成器的示例
Oct 26 Javascript
如何写好你的JavaScript【推荐】
Mar 02 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
Sep 10 Javascript
jQuery/JS监听input输入框值变化实例
Oct 17 jQuery
详解搭建一个vue-cli的移动端H5开发模板
Jan 17 Javascript
解决vue一个页面中复用同一个echarts组件的问题
Jul 19 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
1 Tube Radio
2021/03/02 无线电
第4章 数据处理-php数组的处理-郑阿奇
2011/07/04 PHP
php调用dll的实例操作动画与代码分享
2012/08/14 PHP
PHP获取数组中某元素的位置及array_keys函数应用
2013/01/29 PHP
探讨捕获php错误信息方法的详解
2013/06/09 PHP
php快递单号查询接口使用示例
2014/05/05 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
Js动态创建div
2008/09/25 Javascript
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
JavaScript核心语法总结(推荐)
2016/06/02 Javascript
bootstrap table动态加载数据示例代码
2017/03/25 Javascript
JS FormData上传文件的设置方法
2017/07/05 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
angular内置provider之$compileProvider详解
2017/09/27 Javascript
浅析从vue源码看观察者模式
2018/01/29 Javascript
Bootstrap实现可折叠分组侧边导航菜单
2018/03/07 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
2019/10/11 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
微信小程序用户盒子、宫格列表的实现
2020/07/01 Javascript
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
[01:31:03]DOTA2完美盛典全回顾 见证十五项大奖花落谁家
2017/11/28 DOTA
Python实现使用卷积提取图片轮廓功能示例
2018/05/12 Python
Python Web版语音合成实例详解
2019/07/16 Python
Python发送邮件实现基础解析
2020/08/14 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
Rockport乐步美国官网:风靡美国的白宫鞋
2016/11/24 全球购物
大学生职业生涯规划书范文
2014/01/04 职场文书
长安大学毕业生自我鉴定
2014/01/17 职场文书
采购主管岗位职责
2014/02/01 职场文书
学习经验交流会策划书
2015/11/02 职场文书
Vue实现导入Excel功能步骤详解
2021/07/03 Vue.js
JVM之方法返回地址详解
2022/02/28 Java/Android
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB
MySQL 数据库范式化设计理论
2022/04/22 MySQL