1

私のウェブサイトのランディング ページ ( http://www.chrisamaddeo.com/ ) の背景はフルスクリーンです。このウェブサイトのヘッダー ( http://www.kaiserair.com/ )の例のように動かしたいのですが、私のウェブサイトのヘッダーに入るこのコード HTML があります。

    <!DOCTYPE html>
    <html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
    <script>
    $(document).ready(function() {
var movementStrength = 25;
var height = movementStrength / $(window).height();
var width = movementStrength / $(window).width();
$("#top-image").mousemove(function(e){
          var pageX = e.pageX - ($(window).width() / 2);
          var pageY = e.pageY - ($(window).height() / 2);
          var newvalueX = width * pageX * -1 - 50;
          var newvalueY = height * pageY * -1 - 25;
          $('#top-image').css("background-position", newvalueX+"px     "+newvalueY+"px");
});

私はこのコード、css を持っていますが、動作しません:

#top-image {
background:url('https://d3ui957tjb5bqd.cloudfront.net/images/screenshots/products/0/8/8905/red-rocks-park-o.jpg' -50px -25px;
position:fixed ;
top:0;
width:100%;
z-index:0;
}

私のウェブサイトは weebly でホストされており、それらの html は少し異なります

4

3 に答える 3

3

実際、あなたのコードをコピーしてみました: http://codepen.io/chrisboon27/pen/rEDIC

画像を移動するという点で機能します。jQueryにいくつかの閉じ中かっこを追加する必要がありましたが、この質問にコードを貼り付けたときにそれらを見逃した可能性があります.

また、あなたのサイトを見て、現在 background-size:cover を使用していることに気付きました。これはあなたのbg画像を取得し、div内に収まるようにします-divを超えてbgを拡張したいので、それは望ましくありません-リンクした例のcssでは、calcを使用してbgを作成したことがわかります-画像サイズを 100% 幅 + 50px にします。コードは現在、背景画像の位置を左右に最大 25 ピクセル移動するため、50 ピクセルを使用しました。したがって、div より合計 50 ピクセル広くする必要があります。

編集: calc を使用する場合は、-webkit プレフィックス付きバージョンも含める必要があります (プレフィックスを追加するためにプレフィックスフリーまたはプレフィックスを使用している場合を除きます。ブラウザーのサポートは次のとおりです: http://caniuse.com/calc より多くのブラウザーをサポートする必要がある場合javascript で background-size を設定する必要があります

于 2013-05-24T21:44:34.623 に答える
2

それを再作成して、それらの数値がどこから来たのかを確認せずに追跡するのは非常に難しいと思います. ただし、最近、div内でimgを移動することを除いて、他の誰かのためにjQueryで非常に似たものを作成しました。ただし、背景画像を移動するために切り替えるのにそれほど時間はかからないでしょう (ただし、bg-image のサイズを見つけるのは難しいですが、その場合はそれらをハードコーディングする方がよいかもしれません)。

html:

<div class="container"><img src="foo.jpg" class="draggable"/>
</div>

jQuery:

//for each item
$(".container").each(function(){
  //get the container width
  var conWidth = $(this).width();
  //and its height
  var imgHeight = $(this).find("img").height();
  //get the nested img width
  var conHeight = $(this).height();
  //and its height
  var imgWidth = $(this).find("img").width();
  //figure out how much of the image is not visible horizontally
  var excessWidth = imgWidth - conWidth;
  //and how much is not visible vertically
  var excessHeight = imgHeight - conHeight;
  //how far is this container from the left of the page
  var containerPositionLeft = this.offsetLeft;
  //and from the top
  var containerPositionTop = this.offsetTop;

  //when moving mouse over container
  $(this).mousemove(function(e){
    //figure out how many pixels the mouse is from the left edge of the page
    var mouseoffLeftPage = e.pageX;
    //and how many from the top edge of the page
    var mouseoffTopPage = e.pageY;
    //figure out how many pixels the mouse is from the left edge of the page
    var mouseoffLeftPx = mouseoffLeftPage - containerPositionLeft;
    //and how many from the top edge of the page
    var mouseoffTopPx = mouseoffTopPage - containerPositionTop;
    //figure out the distance the mouse is from the left edge as a percentage (kind of - all the way to the right equals 1 not 100)
    var mouseoffLeftPercent = mouseoffLeftPx/conWidth;
    //do the same for height
    var mouseoffTopPercent = mouseoffTopPx/conHeight;
    //times the 'percentage' value by the amount of image hidden - so if your conatiner is 200px wide, your image 300px wide nd your mouse is half way across this value would be 0.5*100 which would give you 50 - which is exactly half the amount of image that is missing.
    //note this gets set as a minus value as we will be using a minus number to shift the image around.
    var setnewWidth = -(mouseoffLeftPercent * excessWidth);
    //do the same for the height
    var setnewHeight = -(mouseoffTopPercent * excessHeight);
    //add the values as css (using transform(translate) as it's more performant and does subpixel rendering so looks smoother [or does it? it does in animations but seems as my js is not technically animating it it might not make a difference in that respect] - could set the top,left version as fallback for unsupporting browsers but ie9 supports transforms anyway so i dont care.)
    $(this).find("img").css({"transform" : "translate("+ setnewWidth+"px ,"+setnewHeight+"px)" });
    //$(this).find("img").css({"left" : setnewWidth+"px", "top" : setnewHeight+"px" });
  }); 

});

コードで何が機能していないかに対する直接的な回答ではありませんが、それを行う方法の例を (何が起こっているかについてのコメント付きで) 示しています。オブジェクトの数であり、1 ページの複数のアイテムで実行できます。また、ページの最上部に配置する必要はありません。ただし、画像がそのコンテナーよりも大きいと想定しています。大きくない場合、画像はその中で動き回るだけです。連続してより多くの計算を行うことで、変数の数を減らすことができます。ロジックをできるだけ読みやすくしたかっただけです。

デモ: http://codepen.io/chrisboon27/pen/BhkJq

于 2013-05-24T21:16:15.917 に答える
0

それよりも簡単に、CSS の位​​置が「固定」に設定されていることを確認して、ページのどこにいても常に上から 0px になるようにすることができます。

于 2014-07-02T19:53:15.213 に答える