комплексная проблема css - PullRequest
       20

комплексная проблема css

0 голосов
/ 22 октября 2009

У меня есть список изображений, и при наведении курсора на него отображается поле опции, в которое встроено поле ввода кода для копирования. теперь я реализовал на нем zeroclipboard, чтобы функция копирования работала при щелчке мышью, поэтому при наведении указателя мыши на изображение правильно отображается окно параметров, но когда я беру мышь, чтобы щелкнуть поле ввода для копирования кода, опция закрыт, думая, что его больше нет в опции div, потому что zeroclipboard имеет div сверху, поэтому мышь нажимает на него и закрывается.

поэтому решение заключалось в том, чтобы создать этот div внутри опции div, о которой позаботились, но теперь стиль div в zeroclipboard показывает неверно, и я не знаю, как это исправить.

Ниже приведен стиль для zeroclipboar, я не знаю, какой стиль для него установить, поэтому он находится над полем ввода, поэтому я могу щелкнуть по нему, и он работает нормально, как обычно.

    on line 107 in zeroclipboard.js
var style = this.div.style;
    style.position = 'absolute';
    style.left = '' + box.left + 'px';
    style.top = '' + box.top + 'px';
    style.width = '' + box.width + 'px';
    style.height = '' + box.height + 'px';
    style.zIndex = zIndex;

Ответы [ 4 ]

2 голосов
/ 22 октября 2009
$("input[name='htmlcode'], input[name='directlink'], input[name='emaillink'], input[name='imgcode']").live('mouseover', function() {

        clip = new ZeroClipboard.Client();
        clip.setHandCursor( true );
        clip.setText($(this).val());

        var width = $(this).width();
        var height =  $(this).height()+10;
        var flash_movie = '<div>'+clip.getHTML(width, height)+'</div>';
        // make your own div with your own css property and not use clip.glue()
        flash_movie = $(flash_movie).css({
            position: 'relative',
            marginBottom: -height,
            width: width,
            height: height,
            zIndex: 101
            })
        .click(function() { // this puts copied indicator for showing its been copied!
            $(this).next('input').indicator({className: 'copied', wrapTag: 'div', text: 'Copied!', fadeOut: 'slow', display: 'after'});
        });

        $(this).before(flash_movie); // if you want to put after and not before, then you have to change the marginBottom to marginTop
    });
0 голосов
/ 08 ноября 2012

Просто для вашего интереса:

Мой подход использует атрибуты данных для активации функции копирования. В дополнение к этому он устанавливает hover & активные классы для корневого элемента.

Использование:

HTML:

 <button data-zc-copy-value="this is the text to copy">some text<button>

Javascript:

  $(document).on('mouseover', '*[data-zc-copy-value]', function() {
      var that = $(this),
          width = that.outerWidth(),
          height =  that.outerHeight();

      if(that.data("zc-activated") !== "true"){
        // init new ZeroClipboard client
        clip = new ZeroClipboard.Client();
        clip.setHandCursor( true );
        clip.setText(that.data('zc-copy-value'));

        var flash_movie = '<div>'+clip.getHTML(width, height)+'</div>';
        // make your own div with your own css property and not use clip.glue()
        flash_movie = $(flash_movie).css({
          position: 'relative',
          marginBottom: -height,
          width: width,
          height: height,
          zIndex: 101
        });

        // delegate mouse events
        flash_movie.hover(function(){
          that.addClass('hover');
        },function(){
          that.removeClass('hover');
        });
        flash_movie.mousedown(function(){
          that.addClass('active');
        });
        flash_movie.mouseup(function(){
          that.removeClass('active');
        });

        // add flash overlay
        $(this).before(flash_movie); // if you want to put after and not before, then you have to change the marginBottom to marginTop

        that.data("zc-activated", "true");
      }
    });
0 голосов
/ 25 октября 2009

Когда я использовал нулевой буфер обмена, я заметил, что лучше всего перемещать его в отрицательное левое положение, когда оно мне не нужно. Такие как:

#clipboardContainer {position:absolute; top:0; left:-1000px;}

Я не совсем понимаю ваш вопрос, но динамическое перемещение его туда, где оно вызывает у вас проблемы, может стать способом решения вашей проблемы.

0 голосов
/ 22 октября 2009

Я не знаю, как выглядит ваш код, но когда вы отображаете окно опций, используя hover или mouseover / mouseout, просто включите div нулевого буфера обмена ... что-то вроде этого (я считаю, что это правильный ID объекта для использования):

$('img.someimage, .optiondiv, #ZeroClipboardMovie_1').hover(function(){
  $('.optiondiv')
  // positioning stuff here
  .show()
})
...