我试图通过以下方式在图像上实现平移效果tutorial. 然而,它不起作用,我认为这可能是由于way 正在引用javascript。我希望接收平移效果的图像保持静态,不喜欢平移demo.
这就是我迄今为止所尝试的:
我在:moesia-child-01/scripts/pan中有以下javascript(完全复制自上述教程,除了修改了类名)。js公司
<!-- jQuery -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<!-- JS -->
<script>
(function($){
$(document).ready(function(){
//call imagePanning fn when DOM is ready
$(".pan img").imagePanning();
});
//imagePanning fn
$.fn.imagePanning=function(){
var init="center",
speed=800, //animation/tween speed
//custom js tween
_tweenTo=function(el,prop,to,duration,easing,overwrite){
if(!el._mTween){el._mTween={top:{},left:{}};}
var startTime=_getTime(),_delay,progress=0,from=el.offsetTop,elStyle=el.style,_request,tobj=el._mTween[prop];
if(prop==="left"){from=el.offsetLeft;}
var diff=to-from;
if(overwrite!=="none"){_cancelTween();}
_startTween();
function _step(){
progress=_getTime()-startTime;
_tween();
if(progress>=tobj.time){
tobj.time=(progress>tobj.time) ? progress+_delay-(progress-tobj.time) : progress+_delay-1;
if(tobj.time<progress+1){tobj.time=progress+1;}
}
if(tobj.time<duration){tobj.id=_request(_step);}
}
function _tween(){
if(duration>0){
tobj.currVal=_ease(tobj.time,from,diff,duration,easing);
elStyle[prop]=Math.round(tobj.currVal)+"px";
}else{
elStyle[prop]=to+"px";
}
}
function _startTween(){
_delay=1000/60;
tobj.time=progress+_delay;
_request=(!window.requestAnimationFrame) ? function(f){_tween(); return setTimeout(f,0.01);} : window.requestAnimationFrame;
tobj.id=_request(_step);
}
function _cancelTween(){
if(tobj.id==null){return;}
if(!window.requestAnimationFrame){clearTimeout(tobj.id);
}else{window.cancelAnimationFrame(tobj.id);}
tobj.id=null;
}
function _ease(t,b,c,d,type){
var ts=(t/=d)*t,tc=ts*t;
return b+c*(0.499999999999997*tc*ts + -2.5*ts*ts + 5.5*tc + -6.5*ts + 4*t);
}
function _getTime(){
if(window.performance && window.performance.now){
return window.performance.now();
}else{
if(window.performance && window.performance.webkitNow){
return window.performance.webkitNow();
}else{
if(Date.now){return Date.now();}else{return new Date().getTime();}
}
}
}
};
return this.each(function(){
var $this=$(this),timer,dest;
if($this.data("imagePanning")) return;
$this.data("imagePanning",1)
//create markup
.wrap("<div class=\'img-pan-container\' />")
.after("<div class=\'resize\' style=\'position:absolute; width:auto; height:auto; top:0; right:0; bottom:0; left:0; margin:0; padding:0; overflow:hidden; visibility:hidden; z-index:-1\'><iframe style=\'width:100%; height:0; border:0; visibility:visible; margin:0\' /><iframe style=\'width:0; height:100%; border:0; visibility:visible; margin:0\' /></div>")
//image loaded fn
.one("load",function(){
setTimeout(function(){ $this.addClass("loaded").trigger("mousemove",1); },1);
}).each(function(){ //run load fn even if cached
if(this.complete) $(this).load();
})
//panning fn
.parent().on("mousemove touchmove MSPointerMove pointermove",function(e,p){
var cont=$(this);
e.preventDefault();
var contH=cont.height(),contW=cont.width(),
isTouch=e.type.indexOf("touch")!==-1,isPointer=e.type.indexOf("pointer")!==-1,
evt=isPointer ? e.originalEvent : isTouch ? e.originalEvent.touches[0] || e.originalEvent.changedTouches[0] : e,
coords=[
!p ? evt.pageY-cont.offset().top : init==="center" ? contH/2 : 0,
!p ? evt.pageX-cont.offset().left : init==="center" ? contW/2 : 0
];
dest=[Math.round(($this.outerHeight(true)-contH)*(coords[0]/contH)),Math.round(($this.outerWidth(true)-contW)*(coords[1]/contW))];
})
//resize fn
.find(".resize iframe").each(function(){
$(this.contentWindow || this).on("resize",function(){
$this.trigger("mousemove",1);
});
});
//panning animation 60FPS
if(timer) clearInterval(timer);
timer=setInterval(function(){
_tweenTo($this[0],"top",-dest[0],speed);
_tweenTo($this[0],"left",-dest[1],speed);
},16.6);
});
}
})(jQuery);
</script>
在函数中。php中,我添加了以下函数来注册主题脚本并将脚本排队:
function my_js_scripts()
{
// Register the script like this for a theme:
wp_register_script( \'pan-script\', get_template_directory_uri() . \'/scripts/pan.js\' );
// For either a plugin or a theme, you can then enqueue the script:
wp_enqueue_script( \'pan-script\' );
}
add_action( \'wp_enqueue_scripts\', \'my_js_scripts\' );
在我的主题标题中。php,我在wp\\u head()之前添加了这一行:
<?php wp_enqueue_script("jquery"); ?>
wp\\u head()后面的这一行:
<script type="text/javascript" src="/scripts/pan.js"></script>
UPDATE
我已经将jquery参数添加到脚本注册表中,但它仍然不起作用。
function my_js_scripts()
{
// Register the script like this for a theme:
wp_register_script( \'pan-script\', get_template_directory_uri() . \'/scripts/pan.js\', [\'jquery\'] );
// For either a plugin or a theme, you can then enqueue the script:
wp_enqueue_script( \'pan-script\' );
}
add_action( \'wp_enqueue_scripts\', \'my_js_scripts\' );
UPDATE 2
<我有这些Chrome开发者控制台错误:
GET http://localhost:8888/mysite/wp-content/themes/moesia/scripts/pan.js?ver=4.4.2 ?page_id=15:143
GET http://localhost:8888/scripts/pan.js ?page_id=15:193
我从锅上的404个错误中找出了答案。js文件,它在父主题文件夹(moesia)中查找javascript文件,而不是在子主题文件夹(moesia-child-01)中查找javascript文件。
我希望能够将脚本保存在子主题文件夹中--如何做到这一点?
然而,为了测试这一点,我现在已经将scripts文件夹复制到父主题文件夹(moesia/scripts/pan.js中现在有一个副本)。
现在我发现我在pan上有一个语法错误。js,但看不到其来源:
pan.js?ver=4.4.2:2 Uncaught SyntaxError: Unexpected token <