原生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的event详解。
Sep 06 Javascript
学习JS面向对象成果 借国庆发布个最新作品与大家交流
Oct 03 Javascript
JS上传前预览图片实例
Mar 25 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
Jun 24 Javascript
浅谈javascript六种数据类型以及特殊注意点
Dec 20 Javascript
推荐4个原生javascript常用的函数
Jan 12 Javascript
javascript函数自动执行常用方法汇总
Mar 28 Javascript
jQuery Easyui 下拉树组件combotree
Dec 16 Javascript
JavaScript数据结构之双向链表和双向循环链表的实现
Nov 28 Javascript
基于vue开发的在线付费课程应用过程
Jan 25 Javascript
angularjs1.5 组件内用函数向外传值的实例
Sep 30 Javascript
vue请求本地自己编写的json文件的方法
Apr 25 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微信开发之文本自动回复
2016/06/23 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
PHP实现git部署的方法教程
2017/12/19 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
(currentStyle)javascript为何有时用style得不到已设定的CSS的属性
2007/08/15 Javascript
js的闭包的一个示例说明
2008/11/18 Javascript
Js sort排序使用方法
2011/10/17 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
jQuery动态添加
2016/04/07 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
浅谈jQuery中ajaxPrefilter的应用
2016/08/01 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
vue+axios实现登录拦截的实例代码
2017/05/22 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
layer.alert自定义关闭回调事件的方法
2019/09/27 Javascript
JS实现横向跑马灯效果代码
2020/04/20 Javascript
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
Python实现按逗号分隔列表的方法
2018/10/23 Python
Python更新所有已安装包的操作
2020/02/13 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
SmartBuyGlasses美国官网:太阳眼镜和眼镜
2017/08/20 全球购物
日本索尼音乐商店:Sony Music Shop
2018/07/17 全球购物
标准的毕业生自荐信
2014/04/20 职场文书
勾股定理课后反思
2014/04/26 职场文书
三问三解心得体会
2014/09/05 职场文书
离婚协议书格式
2014/11/21 职场文书
元旦主持词开场白
2015/05/29 职场文书
重阳节简报
2015/07/20 职场文书
初中语文教学反思范文
2016/03/03 职场文书
全新239军机修复记
2022/04/05 无线电