首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mootools -检测css类的实例

Mootools -检测css类的实例
EN

Stack Overflow用户
提问于 2013-01-11 02:47:36
回答 1查看 105关注 0票数 1

我有一个网站,我已经添加了一些基本的Mootools动画。这是我有问题的网站的页面:

http://www.humsdrums.com/portfolio/webdesign.html

你会注意到,当你将鼠标移到大图上时,它们会褪色,一个放大镜会补间。这是我为此创建的Mootools类,名为"Magnify“:

代码语言:javascript
复制
var Magnify = new Class({

Implements : [Options, Events],


options : {

    },

initialize : function (item, image, options)
{
    this.setOptions(options);
    this.div = document.id(item);
    this.img = $$(image);

    this.tweenBackground = new Fx.Tween(this.div,{
        duration:'250',
        property:'background-position'

    });

    this.div.addEvent('mouseenter', this.reveal.bind(this));

    this.div.addEvent('mouseleave', this.hide.bind(this));

},

reveal : function()
{
    this.tweenBackground.cancel();
    this.tweenBackground.start('175px -78px', '175px 90px');
    this.img.tween('opacity', .15);
    console.log('mouse over');


},

hide :function ()
{
    this.tweenBackground.cancel();
    this.tweenBackground.start('175px 90px', '175px -78px');
    this.img.tween('opacity', 1);


}

});

然后,我需要通过获取css id为每个要执行此操作的元素初始化类的实例。

代码语言:javascript
复制
window.addEvent('domready', function()
{

var magnify1 = new Magnify('p1', '#p1 img');
var magnify2 = new Magnify('p2', '#p2 img');
var magnify3 = new Magnify('p3', '#p3 img');
var magnify4 = new Magnify('p4', '#p4 img');
});

我想要做的事情很简单,给每个元素一个“放大”的CSS类,这样我就不必每次都使用单独的ID并添加Mootools类的另一个实例。

如果我把一个CSS类的元素放到我的Mootools类中,它就会中断.即使它没有中断,似乎Mootools只会在只有一个元素被鼠标悬停的情况下,同时将该CSS类的所有元素设置为动画。

我唯一的想法就是找到一种方法来获取放大CSS类的所有元素,将它们放入一个数组中,然后检查悬停在上面的项是否等于数组中的一个项。我不知道该怎么做,也不知道这是不是最好的方法。

任何帮助或建议都是很棒的!如果你想看到更多的代码,或者我可以解释一些更好的东西,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-11 07:17:21

你需要对模式进行更多的编码。首先,你有两个元素的关系--一个包含div的元素和一个图像。

您的事件实际上在父el上,但您还需要引用内部元素(图像)并对其进行动画处理。

如果你想抓取所有的图片,你的选择器就是div.item-port > imgdiv.item-port > img ! div.item-port将获取父div,而不是仅将图像作为直接子div的父div。等。

然后,您需要决定将事件附加到哪个元素。您在标记中有很多选择。

在此之前,您已经有了一个包装了这两个元素的a href。这允许你使用一个跨浏览器的:hover伪。

你可以很容易地在纯css中做到:

代码语言:javascript
复制
div.port-item {
    /* defaults you already have and then ... */
    background-position: 175px -78px;
    -webkit-transition: all 0.2s ease-out 0s;
    -moz-transition: all 0.2s ease-out 0s;
    -ms-transition: all 0.2s ease-out 0s;
    -o-transition: all 0.2s ease-out 0s;
    transition: all 0.2s ease-out 0s;
}

.portfolio-item a:hover div.port-item {
    background-position: 175px 90px;
}

.portfolio-item a:hover img {
    opacity: .15; // etc for cross-browser
}

只有当你想在浏览器不支持转换时恢复时,你才应该实例化你的js类。http://jsfiddle.net/wMnzb/4/

代码语言:javascript
复制
var Magnify = new Class({

  Implements: [Options],

  options: {
    parent: 'div'
  },

  initialize: function (images, options) {
    this.setOptions(options);
    this.elements = document.getElements(images);
    this.attachEvents();
  },
  attachEvents: function () {
    var selector = this.options.parent;
    this.elements.each(function (el) {
      var parent = el.getParent(selector);

      parent.set('tween', {
        duration: '250',
        link: 'cancel'
      });
      parent.addEvents({
        mouseenter: function () {
          this.tween('background-position', '175px 90px');
          el.fade(0.15);
        },
        mouseleave: function () {
          this.tween('background-position', '175px -78px');
          el.fade(1);
        }
      });
    });
  }   

});

new Magnify('div.port-item > img');

尽可能地简化,但您可以从is和任何这种重复的特异性中获得完全模糊的概念。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14265111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档