私が持っている関数からファンシーボックスを開こうとしています-要するに私のHTMLコードは次のようになります。
<a href="#modalMine" onclick="myfunction(this); return false;">
click
</a>
私の機能の一部は次のようになります。
function myfunction(me) {
$(me).fancybox({
'autoScale': true,
'transitionIn': 'elastic',
'transitionOut': 'elastic',
'speedIn': 500,
'speedOut': 300,
'autoDimensions': true,
'centerOnScroll': true,
});
}
上記は、IEで動作しますが、FireFoxまたはChromeでは動作しません。これを修正する方法はありますか?別の解決策が可能になることを願っています。
JQueryを使用しているため、HTMLのイベントハンドラーのバインドを停止し、控えめなJavaScriptの記述を開始します。
$(document).ready(function ()
{
function myfunction(me)
{
$(me).fancybox({
'autoScale': true,
'transitionIn': 'elastic',
'transitionOut': 'elastic',
'speedIn': 500,
'speedOut': 300,
'autoDimensions': true,
'centerOnScroll': true // remove the trailing comma!!
}).click();
// fire the click event after initializing fancybox on this element
// this should open the fancybox
}
// use .one() so that the handler is executed at most once per element
$('a[href=#modalMine]').one('click', function ()
{
myfunction(this);
return false;
});
});
ただし、クリック時にfancyboxを設定する理由は特にわかりません。代わりにこれを行うことができます:
$(document).ready(function ()
{
function myfunction()
{
// note the use of "this" rather than a function argument
$(this).fancybox({
'autoScale': true,
'transitionIn': 'elastic',
'transitionOut': 'elastic',
'speedIn': 500,
'speedOut': 300,
'autoDimensions': true,
'centerOnScroll': true
});
}
$('a[href=#modalMine]').each(myfunction);
});
Javascript関数が呼び出されたときに単に空想ボックスを開きたい場合。おそらくクリックの結果ではなく、コードフロー内にある可能性があります。方法は次のとおりです。
function openFancybox() {
$.fancybox({
'autoScale': true,
'transitionIn': 'elastic',
'transitionOut': 'elastic',
'speedIn': 500,
'speedOut': 300,
'autoDimensions': true,
'centerOnScroll': true,
'href' : '#contentdiv'
});
}
これにより、「contentdiv」を使用してボックスが作成され、開かれます。
独自のclick
イベントハンドラーを追加する必要はありません。 fancyboxで要素を初期化するだけです:
$(function() {
$('a[href="#modalMine"]').fancybox({
'autoScale': true,
'transitionIn': 'elastic',
'transitionOut': 'elastic',
'speedIn': 500,
'speedOut': 300,
'autoDimensions': true,
'centerOnScroll': true // as MattBall already said, remove the comma
});
});
できたFancyboxは、ボックスを開くclick
ハンドラーを既にバインドしています。 HowToセクションをご覧ください。
後でプログラムでボックスを開きたい場合は、その要素でclick
イベントを発生させます:
$('a[href="#modalMine"]').click();
引数オブジェクトを<a>
から拡張し、デリゲート経由のクリックイベントでfancyboxのopen
関数を使用します。
var paramsFancy={
'autoScale': true,
'transitionIn': 'elastic',
'transitionOut': 'elastic',
'speedIn': 500,
'speedOut': 300,
'autoDimensions': true,
'centerOnScroll': true,
'href' : '#contentdiv'
};
$(document).delegate('a[href=#modalMine]','click',function(){
/*Now you can call your function ,
you can change fields of paramsFancy via this function */
myfunction(this);
paramsFancy.href=$(this).attr('href');
$.fancybox.open(paramsFancy);
});
クリックイベントをトリガーする必要はありません。fancyboxタイプをajaxにしてトリガーできます。
$.fancybox.open({
href: "http://........",
type: 'ajax'
});
答えは少し複雑すぎるようです。質問を誤解しないでください。
「A」タグへのクリックから空想ボックスを単に開きたい場合。 htmlを設定するだけです
<a id="my_fancybox" href="#contentdiv">click me</a>
ボックスの内容はid "contentdiv"のdiv内にあり、javascriptで次のようにfancyboxを初期化できます。
$('#my_fancybox').fancybox({
'autoScale': true,
'transitionIn': 'elastic',
'transitionOut': 'elastic',
'speedIn': 500,
'speedOut': 300,
'autoDimensions': true,
'centerOnScroll': true,
});
これにより、アンカータグがクリックされたときに「contentdiv」を含むファンシーボックスが表示されます。
function myfunction(){
$('.classname').fancybox().trigger('click');
}
わたしにはできる..
ここに著者の Tips&Tricks ブログ投稿に従って動作するコードがあります。ドキュメントに準備してください:
$("#mybutton").click(function(){
$(".fancybox").trigger('click');
})
これにより、手動でクリックしたかのように、現在表示されている画像またはコンテンツの小さいバージョンがトリガーされます。 Fancyboxを再度初期化することは避けますが、代わりにドキュメント上で初期化したパラメーターを準備しておきます。ボックスをクリックするのとは別のボタンでボックスを開くときに何か別のことをする必要がある場合、パラメーターが必要になりますが、多くの場合、これは彼らが探していたものです。
...
<div class="img_file" style="background-image: url('/upload/test/14120330.jpg')" data-img="/upload/test/14120330.jpg"></div>
<div class="img_file" style="background-image: url('/upload/test/14120330.jpg')" data-img="/upload/test/14120330.jpg"></div>
...
if($(".img_file[data-img]").length) {
var imgs_slider_img = [];
$(".img_file[data-img]").each(function(i) {
imgs_slider_img.Push({
href:$(this).attr('data-img')
});
$(this).attr('data-index-img', i);
}).on("click", function(e) {
e.preventDefault();
$.fancybox.open(imgs_slider_img, {
index: $(this).attr('data-index-img'),
padding: 0,
margin: 0,
prevEffect: 'elastic',
nextEffect: 'elastic',
maxWidth: '90%',
maxHeight: '90%',
autoWidth: true,
autoHeight: true
});
});
}
...
jQuery.fancybox.openが利用できない場合(fancybox 1.3.4で)、再帰の問題を回避するためにsemaforを使用する必要がある場合があります。
<a href="/index.html" onclick="return myfunction(this)">click me</a>
<script>
var clickSemafor = false;
myfunction(el)
{
if (!clickSemafor) {
clickSemafor = true;
return false; // do nothing here when in recursion
}
var e = jQuery(el);
e.fancybox({
type: 'iframe',
href: el.href
});
e.click(); // you could also use e.trigger('click');
return false; // prevent default
}
</script>