`

自己写的一个javascript首页图片切换组件

阅读更多

      在平时做网站的过程中,最常用的一个组件就是首页的图片切换,网上有很多可以下载的Flash插件,jquery插件,但是有时又很难找到适合自己的,有时候是不是想自己动手写个组件? 那样以后有什么自己个性的功能好自定义。怀着这样的心理我也开始动手写了自己的一个js组件,不依赖任何库,最原生的js语法,里面少量的用了一些js高级属性:闭包。希望对js初学者有一定的帮助,代码写的不好也希望大家能指出更正。谢谢。

 

/**

*  定义一个生成类模板,生成的类,

*  每次实例化后自动调用init方法

*/

var Class = window.Class = {

create: function() {

function kclass(obj) {

if(this.init){

this.init(obj); 

};

}

kclass.prototype.constructor = kclass;

return kclass;

},

emptyFn:function(){}

}

 

/*** 类的继承方法 ***/

Object.extend = function(destination, source) {

for (var property in source) {

   destination[property] = source[property];

}

return destination;

};

 

/**

* 绑定函数到一个指定对象***********

*/

Function.prototype.bind = function() {

 

if (arguments.length < 2 && arguments[0] === undefined) return this;

var __method = this, args = $A(arguments), object = args.shift();

return function() {

return __method.apply(object, args.concat($A(arguments)));

}

}

 

以上是prototype框架里常用的一些基础方法,个人觉得很好,就拿来使用了^_^!

 

/**定义一个名字,类似于jQuery的jQuery、$ 变量,写自己的js框架最好是这样

  *全局只有一个你定义的变量,因为全局变量越少越好!

  */

var Lcy = window.Lcy = {};

 

//以下就是实现的主要代码了,一坨一坨的,希望大家能耐心看。呵呵

 

 

/**

* @author liuchuanyang

* @Date 2012-6-7 

* @首页图片切换

*/

Lcy.PicViewTrans = Class.create();

 

Lcy.PicViewTrans.prototype = {

    constructor : Lcy.PicViewTrans,

    init : function(option) { //初始化方法,类似于java类的构造函数

        var opts = this._opts = Object.extend(this.defaults, option||{});

        if(!opts.target) {

            return;

        }

 

        this._element = typeof opts.target == 'string' ? document.getElementById(opts.target) : opts.target;

        var uls = this._element.getElementsByTagName("ul");

        for(var i = 0; i < uls.length; i++) {

            if(uls[i].className === 'slider') {

                this._slider = uls[i];

                break;

            }

        }

 

        if(!this._slider) {

            return;

        }

 

        this._opts.index = 0;    //当前图片索引

        this._opts.count = this._slider.getElementsByTagName("li").length; //切换图总数

 

        //alert("opts.direct : " + opts.direct);

        if(opts.direct === 'left' || opts.direct === 'right') {

            this._slider.style.width = parseInt(this._element.offsetWidth) * opts.count + 100 + "px";

        } else if(opts.direct === 'up' || opts.direct === 'down') {

            //alert("up or down");

            this._slider.style.width = parseInt(this._element.offsetWidth) + "px";

        }

 

        var lis = this._slider.getElementsByTagName("li");

        for(i = 0; i < lis.length; i++) {

            lis[i].style.width = parseInt(this._element.offsetWidth) + "px";

            lis[i].style.height = parseInt(this._element.offsetHeight) + "px";

 

            if(opts.fit) {

                var img = lis[i].getElementsByTagName("img")[0];

                img.style.width = parseInt(this._element.offsetWidth) + "px";

                img.style.height = parseInt(this._element.offsetHeight) + "px";

            }

        }

 

        //创建分页,就是图片切换右下角的1,2,3,4,5数字了

        var ulObj = document.createElement("ul");

        var pages = new Array();

        ulObj.className = "num";        

        for(i = 0; i < opts.count; i++) {

            var liObj = document.createElement("li");

            liObj.innerHTML = i+1;

            ulObj.appendChild(liObj);

            pages.push(liObj);

 

            //liObj.onmouseover = this.start.bind(this);

            liObj.onmouseover = function(t){

                var idx = i;

                var that = t; //这样写var that = this,为错!因为匿名函数又绑定到全局了.注意!this变了

                return function(){

                    clearTimeout(that._timer);

                    that._opts.index = idx;

                    that.start();

                }

            }(this);

        }

        this._element.appendChild(ulObj);

        this._pages = pages;

 

        this.start();

 

    },

 

    //每次切换前的准备,包括: 转移到哪位图,目标位置。

    start : function() {

 

        var opts = this._opts;

        if(opts.index >= opts.count || opts.index < 0) {

            opts.index = 0;

        }

 

        //更改分页page 样式

        this.changePageStyle();

 

        opts.targetPos = 0; //本次切换图片的最终位置

        if(opts.direct === 'left' || opts.direct === 'right') {

            opts.targetPos = -1*this._element.offsetWidth * opts.index;

        } else if(opts.direct === 'up' || opts.direct === 'down') {

            opts.targetPos = -1*this._element.offsetHeight * opts.index;

        }

 

        //执行用户自定义函数

        if(typeof this._opts.changeStart == 'function') {

            this._opts.changeStart();

        }

 

        this._timer = setTimeout(this.move.bind(this), opts.time);

 

    },

 

    move : function() {     //

        var opts = this._opts;

        clearTimeout(this._timer);

        var curPos = 0;     //当前位置

        var style = '';

        if(opts.direct === 'left' || opts.direct === 'right') {

            style = "left"

        } else if(opts.direct === 'up' || opts.direct === 'down') {

            style = "top";

        }

        curPos = parseInt(this._slider.style[style]) || 0;

 

        var iStep = getStep(opts.targetPos, curPos);

        if(iStep != 0) {    //还在移动  

            this._slider.style[style] = (curPos + iStep) + "px";

            this._timer = setTimeout(this.move.bind(this), opts.time);

        } else { //本次切换已经完成

            //alert(this.targetPos);

            if(typeof this._opts.changeStop == 'function') {

                this._opts.changeStop();

            }

            this._slider.style[style] = this._opts.targetPos + "px";

            opts.index++;

            if(opts.auto) {

                this._timer = setTimeout(this.start.bind(this), opts.pause);

            }

        }

 

        //获得一次移动的距离

        function getStep(iTargetPos, iCurPos) {

            var istep = (iTargetPos - iCurPos) / opts.step;

 

            if(istep == 0) return 0;

            if(Math.abs(istep) < 1) {

                return istep > 0 ? 1 : -1;

                //return 0;

            }            

            return istep;

        }

 

    },

 

    stop : function() {

 

    },

 

    changePageStyle : function() {

        var opts = this._opts;

        for(var i = 0; i < this._pages.length; i++) {

            this._pages[i].className = "";

        }

        this._pages[opts.index].className = "current";

    },

 

 

    //图片切换默认属性

    defaults: {

        direct:'left',      //图片滑动方向. left-向左, right-向右, up-向上, down-向下

        fit: false,         //图片长宽是否强制适合窗口大小

        auto: true,         //是否自动切换

        pause: 2000,        //停顿时间(auto为true有效)

        step: 5,            //滑动变化速度

        time: 10,           //滑动延时

        changeStart: function(){},  //开始转换时执行

        changeStop:function(){}     //完成转换时执行

    }

}

 

 

以上是实现代码了,下面就是使用了!

<!-- html页面上需要图片切换的地方,aaa.jpg/bbb.jpg/ddd.jpg三张图片切换 -->

 

<div class="container" id="container">

    <ul class="slider">

        <li><a href="http://www.youll.cn" target="_blank"><img src="aaa.jpg"/></a></li>

        <li><a href="http://www.youll.cn" target="_blank"><img src="bbb.jpg"/></a></li>

        <li><a href="http://www.youll.cn" target="_blank"><img src="ddd.jpg"/></a></li>

    </ul>

</div>

 

<script language="javascript">

//这就是调用的地方了!自定义的东西很多,很多可以使用默认值的。

 

new Lcy.PicViewTrans({
        target : 'container',
        fit: true,
        direct: 'left',
        step: 10,            //滑动变化速度
        time: 10,            //滑动延时
        changeStart: function() {
            //alert(111);
        },
        changeStop: function(){
            //alert(222);
        }
    });
</script>

 

还有最重要的东西就是样式了,没有样式只有js也是白搭哦。

 

/** 首页图片切换 **/

.container, .container *{margin:0; padding:0;}

.container {width:510px; height:300px; overflow:hidden;position:relative;float:left;z-index:1}

.container ul.slider{position:absolute;width:2000px;}

.container ul.slider li{ list-style:none;float:left;display:inline;width:408px; height:168px;}

.container ul.slider li a img{border:none;}

.container .num{ position:absolute; right:5px; bottom:5px;}

.container .num li{

    float: left;

    text-align: center;

    cursor: pointer;

    overflow: hidden;

    margin: 3px 2px;

    background-color: #fff;

    width: 20px;

    height: 20px;

    line-height:20px;

    border-radius: 20px;

    color: #DE7D4B;

    display: list-item;

    font-family: tahoma, arial;

    font-size: 13px;

 

    /*透明度-兼容所有浏览器*/

    filter:alpha(opacity=70);  

    -moz-opacity:0.7;

    -khtml-opacity: 0.7;

    opacity: 0.7;

}

.container .num li.current{

    color: #fff;

    border: 0;

    font-weight: bold;

    background-color: #F60;

    color: white;

    filter: none;

    font-weight: bold;

 

    /*透明度-兼容所有浏览器*/

    filter:alpha(opacity=100);  

    -moz-opacity:1;

    -khtml-opacity: 1;  

    opacity: 1;

}

 

这就是图片切换的所有代码了。如果有兴趣可以拿去用,无图无真相!上图:

 

 

 

 

  • 大小: 78.8 KB
  • 大小: 66.9 KB
1
6
分享到:
评论
2 楼 lcyangily 2012-08-23  
haibin_gl 写道
不错,图片是自己处理的么?

图片是随便下的,如果想看使用效果可以到这里 http://www.youll.cn
1 楼 haibin_gl 2012-08-23  
不错,图片是自己处理的么?

相关推荐

    javascript 图片切换,自动切换。

    总结,JavaScript图片切换功能的关键在于利用DOM操作改变图片的显示状态,通过事件监听响应用户操作,结合定时器实现自动切换。这个功能对于网站来说非常实用,可以提高用户的浏览体验。在实际项目中,还可以结合CSS...

    一个web切换组件

    本项目提供了一个Web切换组件,通过分析其包含的文件,我们可以深入理解其工作原理和实现方式。 首先,`index.html`是项目的主入口文件,它通常包含了HTML结构,用于定义页面的基本布局和内容。在这个web切换组件中...

    JavaScript+flash图片切换集合

    许多现成的JavaScript库,如jQuery、React、Vue等,提供了更高级的图片切换组件,例如: 1. jQuery的`slideUp`和`slideDown`方法,可以实现图片的淡入淡出效果。 2. React中的`useState`和`useEffect`钩子可以轻松...

    js实现的图片切换功能

    以上就是一个基本的JavaScript图片切换功能实现。当然,实际应用中可能需要考虑更多细节,如过渡动画、触发动画的事件触发器、响应式设计等。标签“js pic exchange”也暗示了我们可以将此功能扩展到更复杂的图片...

    JavaScript图片切换效果

    通过以上步骤,你可以创建一个基本的JavaScript图片切换效果。不断学习和实践,可以让你的幻灯组件更加完善和个性化。在实际项目中,还要考虑兼容性、可维护性和用户体验等因素,以提供最佳的网页互动体验。

    值得分享的JavaScript实现图片轮播组件

    本篇文章将详细解析如何使用 JavaScript 来构建一个具备基本功能的图片轮播组件。 首先,我们需要理解轮播组件的基本结构。HTML 部分通常包含一个外层容器 `.carousel-box` 和一个内层容器 `.carousel`,其中内层...

    javascript moveover 之 图片切换

    最后,需要注意的是,对于复杂的图片切换效果,可以考虑使用现有的JavaScript库或框架,如jQuery、React或Vue.js,它们提供了丰富的API和组件,能简化开发过程并提高代码可维护性。 总之,JavaScript的`mouseover`...

    常用js javascript 导航菜单 图片切换 手风琴 弹出框 切换标签

    本压缩包中的资源涵盖了几个常见的JavaScript技术,包括导航菜单、图片切换、手风琴效果、弹出框以及切换标签,这些都是网页动态效果实现的核心组件。 首先,让我们详细探讨一下每个知识点: 1. **导航菜单**:...

    JavaScript 经典的图片切换.rar

    在压缩包中的"JavaScript 经典的图片切换"可能包含了一个实现以上功能的示例代码,通过学习和分析这个示例,你可以了解到如何在实际项目中应用这些JavaScript技术来创建一个图片轮播组件。同时,这也是一种实践...

    Javascript+Flash实现图片切换

    在这个特定的场景中,"Javascript+Flash实现图片切换" 指的是利用这两种技术来创建一个类似新浪体育首页的图片轮播功能。这种功能可以让用户在网页上浏览一组图片,并自动按照设定的时间间隔进行切换,增强用户体验...

    一款兼容主流浏览器的基于 jQuery 的图片切换组件

    总结,这款基于jQuery的图片切换组件是一个高效且跨浏览器的解决方案,它旨在为用户提供流畅的图片浏览体验。通过利用jQuery的简便性和强大的功能,开发者可以快速集成并自定义组件,满足不同项目的需求。尽管描述中...

    网站首页 广告图片切换 活动图片 图片切换

    在构建一个大型网站时,首页的设计至关重要,因为它往往是用户对网站的第一印象。"网站首页 广告图片切换 活动图片 图片切换"这个主题,就是关于如何在网站的首页实现吸引人的动态广告图片展示功能。这种功能可以...

    jquery图片切换插件制作图片层叠缩放展示效果

    在本文中,我们将深入探讨如何使用jQuery来创建一个图片切换插件,实现图片的等比例缩放和层叠展示效果。这种效果常用于网站的轮播图或相册展示,可以提升用户体验,使得图片切换更加生动有趣。 首先,我们需要了解...

    JS代码写的图片切换代码

    总的来说,这个"JS代码写的图片切换代码"是一个综合运用HTML、CSS和JavaScript实现的网页组件,展示了如何利用这三种技术创建动态的用户体验。理解并掌握这些基础知识对于任何想要在网页设计和开发领域深化的人来说...

    图片切换 图片切换

    在本案例中,"图片切换"的描述中提到"flash和js想结合的特效",这意味着我们将探讨如何将这两种技术融合以创建一个高效的图片轮播功能。 Flash曾是创建动态内容的主流工具,尤其在动画和交互设计领域。然而,由于...

    javascript(DOM)图片切换效果.zip

    本压缩包“javascript(DOM)图片切换效果.zip”可能包含一个示例项目,用于演示如何使用JavaScript和DOM来创建动态图片轮播。 在实现JavaScript DOM图片切换效果时,主要涉及以下几个关键知识点: 1. **DOM操作**:...

    网页图片切换经典例子

    总结来说,"网页图片切换经典例子"是一个结合HTML、CSS和JavaScript实现的动态交互功能,通过精心设计的JavaScript代码控制图片的显示和切换效果,提供良好的用户体验。了解并掌握这种技术,对于网页开发者来说是必...

    原生通用js功能组件,同时兼容多端(pc、mobile、wx) 的弹出框组件和图片切换预览组件

    本项目提供的"原生通用js功能组件"正是这样一种解决方案,它能够同时兼容PC、移动设备以及微信环境,实现了弹出框和图片切换预览功能。 首先,我们要了解弹出框组件。弹出框是一种常见的用户界面元素,用于展示额外...

    vacarousel一个基于vue的图片轮播组件

    `va-carousel` 是专为Vue.js设计的一个图片轮播组件,旨在提供优雅的图片展示和切换效果。这个组件通常包含一系列的图片或者内容卡片,用户可以通过点击按钮或滑动屏幕来切换显示的内容。`va-carousel`提供了多种...

    网站首页图片切换代码

    网站的首页图片切换效果是网页设计中常见的动态展示方式,它可以吸引用户注意力,提升网站的视觉体验。这种功能通常通过JavaScript、CSS3或者专门的图片轮播库来实现。下面我们将详细探讨如何实现这一功能,并根据...

Global site tag (gtag.js) - Google Analytics